**
题目: 给定一颗二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点? 树中的节点除了有两个分别指向左右子节点的指针,还有一个指向父节点的指针
**
思想:
- 如果一个节点有右子树,那么它下一个节点就是它的右子树中最左子节点。
- 如果一个节点没有右子树,且该节点是它父节点的左孩子节点,那么它下一个节点就是它的父节点
- 如果一个节点既没有右子树,并且它还是它父节点的右子节点,那么这种情况有点复杂。我们沿着指向父节点的指针一直向上遍历,直到找到一个是它父节点的左子节点的节点。如果这个节点存在,那么这个节点的父节点就是我们要找的下一个节点。
public static TreeNodeCp getNext(TreeNodeCp p){
if(p == null){
return null;
}
TreeNodeCp next = null;
if(p.rchild != null){
TreeNodeCp r = p.rchild;
while(p.lchild!= null){
p=p.lchild;
}
next = p.lchild;
}
else if(p.parent != null){
TreeNodeCp pc = p;
TreeNodeCp pParent = p.parent;
while(pParent != null && pc == pParent.rchild){
pc = pParent;
pParent = pParent.parent;
}
next = pParent;
}
return next;
}
***帅气的远远啊***