在二叉树中找到一个节点的后继节点
该结构比普通二叉树节点结构多了一个指向父节点的 parent 指针。假设有一棵 Node 类型的节点组 成的二叉树,树中每个节点的 parent 指针都正确地指向自己的父节点,头节点的 parent 指向 null。 只给二叉树中的某个节点 node,请实现返回 node 的后继节点的函数。
后继节点:在二叉树的中序遍历的序列中,node 的下一个节点叫作node 的后继节点
现在有一种新的二叉树节点类型如下:
public class Node {
public int value;
public Node left;
public Node right;
public Node parent;
public Node(int data){
this.value = data;
}
}
该结构比普通二叉树节点结构多了一个指向父节点的 parent 指针。假设有一棵 Node 类型的节点组 成的二叉树,树中每个节点的 parent 指针都正确地指向自己的父节点,头节点的 parent 指向 null。 只给二叉树中的某个节点 node,请实现返回 node 的后继节点的函数。
后继节点:在二叉树的中序遍历的序列中,node 的下一个节点叫作node 的后继节点
public static Node getNextNode(Node node){
if(node == null){
return node;
}
if(node.right != null){
return getLeftMost(node.right);
}else{
Node parent = node.parent;
while(parent != null && parent.left != node){
node = parent;
parent = node.parent;
}
return parent;
}
}
public static Node getLeftMost(Node node){
if(node == null){
return node;
}
while(node.left != null){
node = node.left;
}
return node;
}