/*
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;
// 1. 节点有右子树。
if(pNode.right != null) {
TreeLinkNode pp = pNode;
TreeLinkNode cur = pNode.right;
while (cur.left != null) {
cur = cur.left;
}
return cur;
} // 2. 节点无右子树,并且是其父节点的左子树
else if(pNode.next != null && pNode.next.left == pNode) {
return pNode.next;
} else {
// 3. 节点无右子树,沿着指向父节点的指针往上遍历,直到找到一个是它父节点的左子节点的节点。
if(pNode.next == null) return null;
TreeLinkNode father = pNode.next;
while (father.next != null && father.next.left != father) {
father = father.next;
}
return father.next;
}
}
}