- n个结点的二叉树有n+1个空的指针域
- 思路:
- 先线索化左子树;
- 线索化当前结点;(难点)
- 处理当前结点的前驱结点;
- 处理后序结点;
- 线索化右子树;
/**
*
* @param node 当前需要线索化的结点
*/
public void threadedNodes(HeroNode node){
//如果node == null,不能线索化
if (node == null){
return;
}
//1.先线索化左子树
threadedNodes(node.getLeft());
//2.线索化当前结点[难点]
//处理当前结点的前驱结点
//以8结点来理解
//8结点的.left = null, 8结点的.leftType = 1
if (node.getLeft() == null){
//让当前结点的左指针指向前驱结点
node.setLeft(pre);
//修改当前结点的左指针的类型
node.setLeftType(1);
}
//处理后继结点
if (pre != null && pre.getRight() == null){
pre.setRight(node);
pre.setRightType(1);
}
//!!!! 没处理一个结点后,让当前结点是县一个结点的前驱结点。
pre = node;
//3.再线索化右子树
threadedNodes(node.getRight());
}