线索化二叉树
希望充分利用各个节点的左右指针,让各个节点可以指向自己的前后节点。
基本介绍:
二叉链表中的空指针域,存放指向该节点在某种遍历次序下的前驱和后继点的指针。
线索二叉树之后,Node节点的属性有left和right,left可能指向左子树或者前驱节点,right可能指向右子树或者后继节点。
中序线索二叉树基本思路:
在二叉树类中要定义一个pre指针,作为保留的前一个节点。
在node类中创建类型leftType, rightType
1. leftType = 0,指向左子树,leftType = 1,指向前驱节点。
2. rightType = 0,指向右子树,rightType = 1,指向后继节点。
创建函数,传入参数node
- 判断node是否为空,为空则不能线索化
- 先线索化左子树(递归node.left)
- 线索化当前节点
- 当node的左后继节点为空时,将当前节点左指针指向pre,并设置为左指针类型。
- 当当前node的pre不为空且pre.right指针为空时,让前驱节点的右指针指向当前节点,并设置pre的右指针类型。
- 每处理一个节点后,让当前节点是下一个节点的前驱节点。(pre = node)
- 线索化右子树(递归node.right)
遍历线索化二叉树
思路:
- 定义一个变量,存储当前遍历的节点
- node不为空的情况下:
- 当lefttype = 0时,node = node.left
- 打印这个节点
- 若当前节点右指针指向后继节点,就一直输出
- 不指向后继节点时替换遍历的点(node = node.right)