也就是前驱节点和后继节点的问题
因为最初的节点是通过后一个找到的。也就是递归这么个逆序
所以最初的节点并不知道自己后边的节点是谁
然后我们通过一个辅助变量pre 前一个节点来记录
当执行到后一个节点的时候。我们可以找到前一个,也就是在后一个节点中执行。
将pre 初始化为全局的 null
第一个的前一个是没有,然后第一个执行,每一个节点知道自己的前一个节点谁。所以在
所有的关键在于这个pre pre的记录也就是跟有点像迭代器的指针。
在本节点的时候,我们将left 设置成pre 在下一个节点的时候我们将 pre.right =node 当前。完成了最后边的节点的线索化。需要线索化的只有叶子节点的数据,或者其父节点。
public void cue(Hero hero) {
if (hero == null) {
System.out.println("is null");
}else {
if (hero.left != null) {
cue(hero.left);
}
if (hero.left == null) {
hero.left=pre;
hero.leftFlag=1;
}
if (pre != null && pre.right == null) {
pre.right = hero;
pre.rightFlag = 1;
}
pre = hero;//当这个节点的左边处理好了。这个方法就结束了。我们将这个节点就是pre了
if (hero.right != null) {
cue(hero.right);
}
}
}
class Hero{
int no;
String name;
Hero left;
Hero right;
int leftFlag;//如果是1 就是前驱节点
int rightFlag;//如果是1 就是后继节点
节点中也加了两个属性