找到中序遍历中,某个节点的后继节点.
/*
* @Author printf
* @Date 2024-01-27 09:49
* @Version 1.0
*/
package com.atchina.tree;
public class SuccessorNode {
public static void main(String[] args) {
}
public static class Node{
public int value;
public Node left;
public Node right;
public Node parent;
public Node(int data){
this.value = data;
}
}
public static Node getSuccessorNode(Node node){
if(null == node){
return null;
}
if(node.right != null){
// 右节点不为空
return getLeftMost(node.right); // 找右子树的最左节点
}else{
// 右节点为空,向上找头节点
Node parent = node.parent;
// 当parent为空,表示该节点为最后一个节点,没有后继节点
while(parent != null && parent.right == node){// 当前节点是其父亲节点右孩子
node = parent;
parent = parent.parent;
}
return parent;
}
}
public static Node getLeftMost(Node node){
while(node.left != null){
node = node.left;
}
return node;
}
}