题目描述:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
知识点:
- 对中序遍历的理解,我觉得就是一个找规律的数学题
- 指针和树进行了结合
解题思路:
- 这道题给我们一个二叉树的某一个节点,要求我们求其中序遍历的下一个节点
首先我们来看一个二叉树中序遍历的图

我们可以发现的是其每个节点的下一个节点总共有这么几种情况
- 2 -> 3,4 -> 5,6 -> 7,8 -> 9 其下一个节点一定为其右节点,或者右节点的左节点,或右节点的左节点的左节点……
- 1 -> 2,7 -> 8 其为父节点的左节点
- 3 -> 4,5 -> 6 其为父节点父节点的左节点……
- 我们只需要按以上的情况进行判断便好,如果最后都没有返回值返回null便好
解题代码:
function GetNext(pNode)
{
// write code here
if(!pNode) return null;
if(pNode.right) {
pNode = pNode.right;
while(pNode.left) {
pNode = pNode.left;
}
return pNode;
}
while(pNode.next) {
let temp = pNode.next;
if(temp.left === pNode) {
return temp
}else {
pNode = temp;
}
}
return null
}