目录
概念
代码实现
package Part10.Threaded;
public class threadedBinaryTree {
public static void main(String[] args) {
//创建二叉树
//创建结点
//插入节点到二叉树
//线索化二叉树
//binaryTree.perThreadedNode(root);
//binaryTree.centerThreadedNode(root);
//binaryTree.finalThreadedNode(root);
System.out.println(node3.getLeft());
}
}
class BinaryTree{
private HeroPoint root;
// 线索化的前节点
private HeroPoint per;
public void perThreadedNode(HeroPoint node){
if(node == null){
return;
}
if(node.getLeft() == null){
node.setLeft(per);
node.setLeftType(1);
}
if(per != null && per.getRight() != null){
per.setRight(node);
per.setRightType(1);
}
per = node;
if(node.getLeftType() == 0){
perThreadedNode(node.getLeft());
}
if (node.getRightType() == 0) {
perThreadedNode(node.getRight());
}
}
public void centerThreadedNode(HeroPoint heroPoint){
if(heroPoint == null){
return;
}
// 先左遍历找完所有的左子树
centerThreadedNode(heroPoint.getLeft());
// 建立联系
if(heroPoint.getLeft() == null){
heroPoint.setLeft(per);
heroPoint.setLeftType(1);
}
if(per != null && per.getRight() != null){
per.setRight(heroPoint);
per.setRightType(1);
}
per = heroPoint; // 保存用于下一节点的使用
// 查找右子树
centerThreadedNode(heroPoint.getRight());
}
public void finalThreadedNode(HeroPoint heroPoint){
if(heroPoint == null){
return;
}
// 左遍历找完所有的左子树
finalThreadedNode(heroPoint.getLeft());
// 查找右子树
finalThreadedNode(heroPoint.getRight());
// 建立联系
if(heroPoint.getLeft() == null){
heroPoint.setLeft(per);
heroPoint.setLeftType(1);
}
if(per != null && per.getRight() != null){
per.setRight(heroPoint);
per.setRightType(1);
}
per = heroPoint;
}
}
class HeroPoint{
private int id;
private String name;
private HeroPoint left;
private HeroPoint right;
//说明
//1. 如果leftType == 0 表示指向的是左子树, 如果 1 则表示指向前驱结点
//2. 如果rightType == 0 表示指向是右子树, 如果 1表示指向后继结点
private int leftType;
private int rightType;
}