public class test {
//创建完全二叉树
public static node1 buildTree(int[] array, int index){
node1 node = null;
if(index > array.length){
return null;
}
node = new node1(array[index - 1]);
node.left = buildTree(array,2*index);
node.right = buildTree(array,2*index+1);
return node;
}
//创建线索二叉树
public static node1 ThreadTree(node1 node, node1 pre){
if (node != null) {
ThreadTree(node.getLeft(),pre);//先找到最左面的子节点,然后依次向上递归
if (node.getLeft() == null) {
node.ltag = 1;
node.left = pre;
}
if (pre != null && pre.right == null) {
pre.rtag = 1;
pre.right = node;
}
pre = node;
ThreadTree(node.right, pre);
}
return node;
}
//寻找后继节点
public static void insuccnode(node1 root, node1 node){
int data = root.data;
if(root.ltag == 1){
System.out.println(root.data);
}else{
if(node == null){
node = root.right;
}else{
node = root.left;
}
insuccnode(node,node);
}
}
public static void main(String[] args) {
int[]array = {1,2,3,4,5,6,7,8,9};
node1 root = buildTree(array,1);
node1 pre = null;
root = ThreadTree(root, pre);
node1 nn = null;
insuccnode(root,nn);
}
}
public class node1 {
int data;
node1 left;
node1 right;
int ltag;
int rtag;
public node1(int data){
this.data = data;
this.left = null;
this.right = null;
this.rtag = 0;
this.ltag = 0;
}
public node1 getLeft(){
return left;
}
}
java实现线索二叉树
最新推荐文章于 2022-12-21 16:28:09 发布