线索化二叉树
基本介绍
1)具有n个节点的二叉链表中有(2n - (n - 1))= n + 1 个空指针域,利用空指针域存放指向该节点某种遍历次序下的前驱结点和后继节点的指针,这种附加的指针称为线索。
2)这种加入了线索的二叉链表叫做线索链表,相应的二叉树叫做线索二叉树(Threaded BinaryTree)。线索二叉树根据遍历的顺序可以分为三种:
前序搜索二叉树、中序搜索二叉树、后序搜索二叉树。
3)一个节点的前一个节点,成为前驱结点。
4)一个节点的后一个节点,成为后继节点。
代码实现
为了区分当前节点的左(右)指针指向的到底是左(右)子树还是前驱(后继)节点,引入两个整型属性:leftType 与 rightType,规定等于0时代表指向子树,等于1时代表线索。
建立节点实现类
class TreeNode{
private int val;
TreeNode right;
TreeNode left;
int LeftType;//0表示指向的是子树,1表示指向前驱节点
int RightType;
public int getLeftType() {
return LeftType;
}
public void setLeftType(int leftType) {
LeftType = leftType;
}
public int getRightType() {
return RightType;
}
public void setRightType(int rightType) {
RightType = rightTy