线索二叉树spa
遍历二叉树,实质上是对一个非线性结构进行线性化操做,使得每一个节点在这些线性序列中有且仅有一个直接前驱和直接后驱。.net
线索:指向前驱或后继节点的指针被称为线索。指针
线索二叉树:加上线索的二叉链表就叫作线索二叉树。blog
实现ci
有n个节点的二叉链表一定有n+1个空链域。get
推导过程是这样的:博客
一个拥有n个节点的二叉树,一定有2n个指针域,也必定有n-1个分支,那么 2n - (n - 1) 就是空指针域的数量,即:n + 1it
在线索二叉树的节点中增长两个标志域二叉树
LTag = 0 时 lchild域指示节点的左孩子遍历
= 1 时 lchild域指示节点的前驱
RTag = 0 时 rchild域指示节点的右孩子
= 1 时 rchild域指示节点的后继
线索二叉树遍历方法:
在线索树上进行遍历,只要先找到序列中的第一个节点,而后依次找节点后继直至其后继为空为止。
当一个二叉树有了线索以后,就不须要栈信息。对于非叶子节点,也就是分支节点来讲,前驱就是其左子树最后访问到的数据,后继是右子树最早访问到的一个元素。(中序线索链表)
线索二叉树优势:
在中序线索二叉树上遍历二叉树,虽然时间复杂度一样也是O(n),但常数因子要小一些,并且不须要设栈。所以,若在某程序中所用二叉树须要常常遍历或查找节点在遍历说的先行序列中的前驱和后驱,则应采用线索链表作存储结构。
学PHP的小蚂蚁 博客 http://my.oschina.net/woshixiaomayi/blog