package example;
/**
* 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?
* 树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。
*
* @author lvtong
* @date 2020/1/30
*/
public class Example8 {
public static void main(String[] args) {
//创建树
BinaryTreeNode nodeA = new BinaryTreeNode("a");
BinaryTreeNode nodeB = new BinaryTreeNode("b");
BinaryTreeNode nodeC = new BinaryTreeNode("c");
BinaryTreeNode nodeD = new BinaryTreeNode("d");
BinaryTreeNode nodeE = new BinaryTreeNode("e");
BinaryTreeNode nodeF = new BinaryTreeNode("f");
BinaryTreeNode nodeG = new BinaryTreeNode("g");
BinaryTreeNode nodeH = new BinaryTreeNode("h");
BinaryTreeNode nodeI = new BinaryTreeNode("i");
nodeA.left = nodeB;
nodeA.right = nodeC;
nodeA.parent = null;
nodeB.left = nodeD;
nodeB.right = nodeE;
nodeB.parent = nodeA;
nodeC.left = nodeF;
nodeC.right = nodeG;
nodeC.parent = nodeA;
nodeD.left = null;
nodeD.right = null;
nodeD.parent = nodeB;
nodeE.left = nodeH;
nodeE.right = nodeI;
nodeE.parent = nodeD;
nodeF.left = null;
nodeF.right = null;
nodeF.parent = nodeC;
nodeG.left = null;
nodeG.right = null;
nodeG.parent = nodeC;
nodeH.left = null;
nodeH.right = null;
nodeH.parent = nodeE;
nodeI.left = null;
nodeI.right = null;
nodeI.parent = nodeE;
BinaryTreeNode current = nodeI;
BinaryTreeNode next = nextBinaryTreeNode(current);
System.out.println("当前节点:" + current.getValue());
System.out.println(next == null ? "下一节点:无" : "下一节点:" + next.getValue());
}
/**
* 获取下一个节点
*
* @param node 当前节点
* @return 下一节点
*/
private static BinaryTreeNode nextBinaryTreeNode(BinaryTreeNode node) {
if (node == null) {
System.out.println("当前节点为空");
return null;
}
//当前节点有右子树时,下一节点为右子树的最左节点
if (node.right != null) {
node = node.right;
while (node.left != null) {
node = node.left;
}
return node;
}
while (node.parent != null) {
if (node == node.parent.left) {
return node.parent;
}
node = node.parent;
}
return null;
}
/**
* 二叉树节点
*/
static class BinaryTreeNode {
String value;
BinaryTreeNode left;
BinaryTreeNode right;
BinaryTreeNode parent;
private String getValue() {
return value;
}
BinaryTreeNode(String value) {
this.value = value;
this.left = null;
this.right = null;
this.parent = null;
}
}
}
来源:CSDN
作者:LvTong199881
链接:https://blog.csdn.net/qq_35564145/article/details/104117613