给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
- 如果该节点存在右子树,那么下一个节点在右子树上
- 如果该节点不存在右子树,说明以这个节点为根节点的树被遍历完成。回溯
- 回溯的时候要注意两点
- 回溯的结束的条件是当前节点不是父亲的右儿子
- 回溯到了根节点,根节点的父亲是null
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode){
// 如果存在右子树
if(pNode.right != null) {
pNode = pNode.right;
while(pNode.left != null) pNode = pNode.left;
return pNode;
}
// 以该节点为根节点的子树遍历完成,回溯
while(pNode.next !=null && pNode.next.right == pNode){
pNode = pNode.next;
}
return pNode.next;
}
}