题解 | #二叉树的下一个结点#

二叉树的下一个结点

https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e

package main

/*
type TreeLinkNode struct {
    Val int
    Left *TreeLinkNode
    Right *TreeLinkNode
    Next *TreeLinkNode
}
*/

// 分三种情況
// 1. 有右子树,则下一节点是右子树的最左节点
// 2. 无右子树,且该节点是其父节点的左子树,则下一节点是父节点
// 3. 无右子树, 且该节点是其父节点的右子树,则一直沿着父节点往上找,直到找到该节点是其父节点的右子树,则下一节点是该节点的父节点

func GetNext(pNode *TreeLinkNode) *TreeLinkNode {
	if pNode == nil {
		return nil
	}
	
	// 1. 有右子树,则下一节点是右子树的最左节点
	if pNode.Right != nil {
		pNode = pNode.Right
		// 找到最左节点
		for pNode.Left != nil {
			pNode = pNode.Left
		}
		return pNode
	}
	
	// 无右子树,则一直往上找父节点
	for pNode.Next != nil {
		// 返回条件为: pNode 的父节点的左节点等于该节点本身
		if pNode.Next.Left == pNode {
			return pNode.Next
		}
		// 一直往上找父节点
		pNode = pNode.Next
	}
	
	return nil
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-13 19:30
化身华黑 今天询问对接人审批情况,结果被告知没HC了 云计算 
苦闷的柠檬精allin实习:主管面结束后hr每周保温一次,结果前几天和我说没hc了,我也化身华黑子了
投递华为等公司8个岗位 > 华为求职进展汇总
点赞 评论 收藏
分享
06-04 09:27
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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