题解 | #二叉树的下一个结点#
二叉树的下一个结点
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
}
