给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
析:每次先找当前结点的右子树中序遍历的第一个结点,如果非空就返回,如果为空,就让当前结点逐步向祖宗方向寻找,如果某个祖宗是前一祖宗的左结点,就返回该结点。否则返回null
/*
public class TreeLinkNode {
int val;
TreeLinkNode left = null;
TreeLinkNode right = null;
TreeLinkNode next = null;
TreeLinkNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode)
{
if(pNode==null)
return null;
TreeLinkNode res =getFirst(pNode.right);
if(res!=null)
return res;
else {
while(pNode.next!=null){
TreeLinkNode fa = pNode.next;
if(fa.left==pNode)
return fa;
pNode=pNode.next;
}
return res;
}
}
// 某树按照中序遍历得到的第一个结点
public TreeLinkNode getFirst(TreeLinkNode node){
if(node==null)
return null;
while(node.left!=null)
node=node.left;
return node;
}
}