题解 | #二叉搜索树与双向链表#

二叉搜索树与双向链表

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

var nodeList []*TreeNode

func Convert(pRootOfTree *TreeNode) *TreeNode {
	// 如果二叉搜索树是一棵空树直接返回空
	if pRootOfTree == nil {
		return nil
	}
	nodeList = []*TreeNode{}
	// 调用遍历二叉树函数
	inOrder(pRootOfTree)

	// 选择 nodeList 的第一个结点作为双向链表的头结点
	var head *TreeNode
	head = nodeList[0]
	// 将头结点的上一个结点置为空
	head.Left = nil
	// 定义变量 preNode 用于指向当前被遍历节点的上一个结点,初始化的时候指向头结点
	preNode := head

	// 遍历 nodeList
	for i := 1; i < len(nodeList); i++ {
		// 将 preNode 的后继结点指向当前被遍历的结点
		preNode.Right = nodeList[i]
		// 将当前被遍历结点的上一个结点指向 preNode
		nodeList[i].Left = preNode
		// preNode 向右移动
		preNode = preNode.Right
	}
	// 返回双向链表
	return head
}

// 定义递归函数中序遍历二叉搜索树,并将遍历的结果加入到一个序列中
func inOrder(curNode *TreeNode) {
	// 递归结束的条件:当前被遍历的结点为空
	if curNode == nil {
		return
	}

	// 递归处理当前结点的左子树
	inOrder(curNode.Left)
	// 处理中结点
	nodeList = append(nodeList, curNode)
	// 递归处理当前结点的右子树
	inOrder(curNode.Right)
}
全部评论

相关推荐

06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

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