class Threade{
BinaryTree root;//记录根节点,用于遍历
BinaryTree pre;//pre指针,用于线索化,表示上一个节点
Threade(BinaryTree node){
this.root = node;
ThreadeNodes(node);
}
public void ThreadeNodes(BinaryTree node){
if(node == null)
return;
ThreadeNodes(node.left);//线索化左节点
/**
* 线索化操作,pre与node相互配合线索化
*/
if(node.left == null){
node.left = pre;
node.lefttype = 1;
}
if(pre!=null&&pre.right==null){
pre.right = node;
pre.righttype = 1;
}
pre = node;
ThreadeNodes(node.right);//线索化右节点
}
public void ThreadeTraverse(){
BinaryTree node = root;//将根节点给node
while(node!=null){
while(node.lefttype == 0)
node = node.left;//中序遍历创建,如果是左孩节点,就继续
System.out.println(node.val);
while(node.righttype == 1){//如果right表示右节点,继续
node = node.right;
System.out.println(node.val);//循环输出
}
node = node.right;
}
}
}
class BinaryTree{
int val;
BinaryTree left;
BinaryTree right;
int lefttype;//左指针类型,0表示指向左节点,1表示指向前驱节点
int righttype;//右指针类型,0表示指向右节点,1表示指向后继节点
BinaryTree(){}
BinaryTree(int val){
this.val = val;
}
}
Java:中序线索化二叉树及遍历
于 2022-10-28 20:33:26 首次发布