题目
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
- 牛客链接:https://www.nowcoder.com/questionTerminal/9023a0c988684a53960365b889ceaf5e
思路
- 有右孩子则返回右孩子的最左孩子
- 无右孩子则看有无父节点
- 没父节点,那么表示为根节点,则返回null
- 有父节点,则找一个祖先节点,这个祖先节点的左子树包含父节点
/*function TreeLinkNode(x){
this.val = x;
this.left = null;
this.right = null;
this.next = null;
}*/
function GetNext(pNode) {
if (!pNode) return null
if (pNode.right) {
let node = pNode.right
while (node.left) {
node = node.left
}
return node
}
if (!pNode.next) return null
let node = pNode
while (node.next) {
if (node === node.next.left) {
return node.next
}
node = node.next
}
return null
}
module.exports = {
GetNext: GetNext
}