public class E08FindNextInorderNode {
//找到中序遍历序列中某个节点的下一个节点
private static class BinaryTreeNode{
//二叉树节点,有三个指针
private int value;
BinaryTreeNode parentNode;
BinaryTreeNode leftNode;
BinaryTreeNode rightNode;
}
public static BinaryTreeNode getNext(BinaryTreeNode node){
//校验输入
if (node == null)
return null;
BinaryTreeNode nextNode = null;
if (node.rightNode != null){
//该节点有右子树时,下一个节点为右子树的最左边的节点
BinaryTreeNode mostLeftNode = node.rightNode;
while(mostLeftNode.leftNode != null)
mostLeftNode = mostLeftNode.leftNode;
nextNode = mostLeftNode;
}
else if (node.parentNode != null){
//该节点无右子树时,向上回溯,寻找为其父节点左节点的节点A
BinaryTreeNode currentNode = node;
BinaryTreeNode parentNode = node.parentNode;
while(parentNode != null && parentNode.rightNode == currentNode){
currentNode = parentNode;
parentNode = parentNode.parentNode;
}
//找到A则赋值为A的父节点,没找到将赋值为null
nextNode = parentNode;
}
//返回
return nextNode;
}
}
二叉树的下一个节点(Java实现)
最新推荐文章于 2025-02-25 20:47:36 发布