题解 | #二叉搜索树与双向链表# 层序遍历 非递归

二叉搜索树与双向链表

https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5

package main
import . "nc_tools"
/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
 * 
 * @param pRootOfTree TreeNode类 
 * @return TreeNode类
*/
func Convert(pRootOfTree *TreeNode) *TreeNode {
	if pRootOfTree == nil {
		return nil
	}

	var stack []*TreeNode
	var pre *TreeNode // 用于保存双向链表的前一个节点
	var head *TreeNode // 用于保存双向链表的头节点
	isFirst := true

	current := pRootOfTree

	for current != nil || len(stack) > 0 {
		for current != nil {
			stack = append(stack, current)
			current = current.Left
		}
		current = stack[len(stack)-1]
		stack = stack[:len(stack)-1]

		if isFirst {
			head = current // 第一个节点作为双向链表的头节点
			pre = current
			isFirst = false
		} else {
			pre.Right = current
			current.Left = pre
			pre = current
		}

		current = current.Right
	}

	return head
}

全部评论

相关推荐

08-19 18:59
已编辑
绍兴文理学院 Java
一只末影酱:一、1w+qps嘛感觉数据有点太夸张了 二、还有就是99.95%这些,本身大部分学生做的小项目基本是100%,因为量太小了,网络抖动问题也基本模拟不出来,感觉这些不太好写 三、你这些项目,都是一个月就做完了,更抽象了,也就是大概意味着,没有技术调研,没有上线测试,
点赞 评论 收藏
分享
站队站对牛:还是浙江学校欢迎
投递海康威视等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务