本系列是《剑指offer》或leetcode的JavaScript版本。 每期1-2个算法,也有可能是一个类别。 文章包括题目、思路以及代码。 如果您对本期有不同或者更好的见解,请后台留言,喜欢请点个好看,谢谢阅读。
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
中序遍历的顺序 左 - 根 - 右
所以寻找下一个节点的优先级应该反过来 优先级 右 - 根 - 左
以下图的二叉树来分析:
中序遍历:CBDAEF
/*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) {
pNode = pNode.right;
while (pNode.left) {
pNode = pNode.left;
}
return pNode;
} else {
while (pNode) {
if (!pNode.next) {
return null;
} else if (pNode == pNode.next.left) {
return pNode.next;
}
pNode = pNode.next;
}
return pNode;
}
}