- 寻找该节点中序遍历的下一个节点,有可能在它父辈,也可能在他孩子
- 如果该节点右孩子为空,则下一个节点为父辈,那么找到了该节点所属于的第一个左支系的父辈,则是所求节点
- 如果该节点右孩子不为空,则下一个节点为它的右孩子的第一个左孩子或者是它的右孩子
import java.util.*;
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode) {
if(pNode == null) {
return null;
}
// 没有右孩子则找父节点
if(pNode.right == null) {
TreeLinkNode father = pNode.next;
// 找出该孩子属于父辈的第一个非右支系
while(father != null && father.right == pNode) {
pNode = father;
father = father.next;
}
return father;
}
// 自己有右孩子则下一个节点为右孩子中序输出的第一个
pNode = pNode.right;
// 先输出左孩子
while(pNode.left != null) {
pNode = pNode.left;
}
return pNode;
}
}