详细了解请参考https://blog.csdn.net/UncleMing5371/article/details/54176252
下面介绍的是我对中序化线索化二叉树理解,我会用尽量简洁语言描述关键步骤。
1.涉及到二叉树因此遍历,递归少不了,先确定递归终止条件,这里是当前节点代入线索化方法node.thread();发现自己为null,则return即可。
2.由于是中序遍历,即先处理左子树,再处理自身,再再处理右子树。详情见下图
以下是核心实现代码:
public void thread(ThreadedNode node) {
//递归结束条件
if(node == null) {
return;
}
//处理左子树
thread(node.leftNode);
//处理节点自身
//处理前驱
if(node.leftNode == null) {
//设置指针指向前驱节点
node.leftNode = pre;
//改变节点类型,为指向前驱
node.leftType = 1;
}
//处理后继
if(pre != null && pre.rightNode == null) {
//设置前驱节点指针指向当前节点
pre.rightNode = node;
//改变节点类型,为指向后继(相对来说)
pre.rightType = 1;
}
//每处理一个节点,当前节点是下一个节点的前驱节点
pre = node;
//处理右子树
thread(node.rightNode);
}