一、查询后继节点
后继节点:中序遍历时,某个节点的后一个节点即是该节点的后继节点。
规定二叉树的结构如下:
public static class Node {
public int value;
public Node left;
public Node right;
// 父节点
public Node parent;
public Node (int v) {
value = v;
}
}
如何快速的找到某个节点的后继节点
1、思路
1、按照后继节点的定义来查找某个节点的后继节点
即按中序遍历此二叉树,再查找指定节点的后继节点。时间复杂度是O(N)。显然此方法不是最优解。
2、根据二叉树的结构,以及多的这个parent指针来查找
(1)指定节点X有右树,则X的后继节点就是X右树上最左的孩子。根据后继节点的定义得出的。
(2)X无右树,则根据parent指针往上找,直到找到某个节点是它父节点Y的左孩子为止,则Y就是X的后继节点;如果一直往上都没有找到某个节点是它父节点的左孩子,则该节点是最右的孩子,无后继节点。
Why:因为X是Y左树上的最右孩子,按照中序遍历的顺序,遍历完X就是Y了。
时间复杂度是O(K)(K是指定节点到后继节点的最短节点数)
很显然第二种方法更优。
2、代码
/**
* 查找后继节点
*
* &#