1、中序线索化二叉树
创建如上的二叉树,线索化二叉树时,根据指定的遍历方式得到的节点的访问顺序,一个节点前面的节点,叫做前驱节点,一个节点后面的节点,叫做后继节点。
线索化二叉树的规则:
按照某一遍历规则。记录当前节点(cur),上次访问的节点(pre)。
① 如果当前节点的左孩子为空 (cur.leftNode == null),就让当前节点的左指针指向它的前驱节点 ,并把当前节点左指针的模式修改为线索类型 (cur.leftNode = pre ,cur.leftType = 1)。
② 如果当前节点的前驱节点的右孩子为空 (pre.rightNode == null),就让当前节点的前驱节点的右指针指向当前节点,并把前驱节点的右指针修改为线索类型 (pre.rightNode = cur ,pre.rightType = 1)。
代码实现:
/**
* 线索二叉树节点
*/
public class ThreadedNode {
//节点的权
int value;
//节点的左右孩子节点
ThreadedNode leftNode;
ThreadedNode rightNode;
//表示指针的类型
int leftType;
int rightType;
//设置节点的权值
public ThreadedNode(int value) {
this.value = value;
}
//设置节点的左右孩子节点
public void setLeftNode(ThreadedNode leftNode) {
this.leftNode = leftNode;
}
public void setRightNode(ThreadedNode rightNode) {
this.rightNode = rightNode;
}
//获取节点的左右孩子节点
public ThreadedNode getLeftNode() {
return this.leftNode;
}