1.后继节点:二叉树的中序遍历下,某节点的后一个节点就是后继节点。
2.两种情况:
- 节点有右子树:右子树中的最左节点就是该节点的后继节点。可以通过“左中右”顺序理解一下。
- 节点无右子树:一直向上查找,直到该节点是父节点的左孩子,即为后继节点。
3.节点的数据结构,比一般情况下多了一个parent节点。该结构比普通二叉树节点结构多了一个指向父节点的parent指针。 假
设有一 棵Node类型的节点组成的二叉树, 树中每个节点的parent指针都正确地指向 自己的父节点, 头节点的parent指向null。 只给一个在二叉树中的某个节点 node, 请实现返回node的后继节点的函数。 在二叉树的中序遍历的序列中, node的下一个节点叫作node的后继节点。
4.代码演示:
public class SuccessorNode {
public static class Node {
public int value;
public Node left;
public Node right;
public Node parent;
public Node(int data) {
this.value = data;
}
}
// 根节点的父节点是null
public static Node getSuccessorNode(Node node) {
if (node == null) {
return node;
}
if (node.right != null) { // case1:有右子树
return getLeftMost(node.right);
} else { // case