线索二叉树将每个节点的前驱节点与后继节点与节点本身进行了一个连接,而我们需要进行的操作是如果节点的左节点为空 那么就让左节点 指向其前驱节点右节点为空就让其指向其后继节点 ,在这里又要注意的一点是:根据遍历次序的不同 我们有前序线索树,中序线索树,以及后续线索树。
这样的话,我们就还需要进行一个操作就是对每个节点的左右节点的类型 进行标识,究竟是左子树还是前驱节点还是右子树,以及是后续节点
在节点类中 我们需要添加两个标识符用于 标识区分到底下一个节点是属于左右子树,还是属于前驱节点或后继节点
int leftType; int rightType; 起到标识作用
在二叉树中设置相对应的方法实现对二叉树的线索化
public void threadNode(){
threadNode(root); //利用root开启线索二叉树的遍历
}
public void threadNode(TreeNode node ){
//设置递归的停止条件 当传入的节点为空的时候就停止相应的递归
if (node==null){
return; //实现递归的结束
}
//处理左子树
threadNode(node.lNode);
//如果左节点为空的话 就让其指向其前驱节点
if(node.lNode==null){
node.lNode=pre;
//利用标识符 进行标记
node.leftType=1;
}
if ( pre!=null&& pre.rNode==null){
pre.rNode=node;
node.rightType=1;
}
//每调用一次方法就要存储一下前驱节点
pre=node;
//处理右子树
threadNode(node.rNode);
}
测试类中利用相关的方法 线索化二叉树, 并取值 测试
这是中序化二叉树, 前序线索化二叉树与后续线索化二叉树与之类似
tree.centerShow();
tree.threadNode();//将二叉树进行线索化
TreeNode after=l2.rNode;
System.out.println("+++++++++++++++++++++"); //实现相关的打印
System.out.println(after.value);```



