线索二叉树.pptVIP

  • 28
  • 0
  • 约1.43千字
  • 约 13页
  • 2017-01-12 发布于江苏
  • 举报
线索二叉树

线索二叉树 扩展后序序列 扩展后序序列使指在二叉树节点的后序遍历序列中加入了表示空子树的符号序列 扩展后序序列 思考:一个二叉树是不是对应一个唯一的扩展后序序列呢?反过来呢? 利用扩展后序序列来建立一棵二叉树: 基本思想:依次读入扩展后序序列,从左往右检测每一个符号,如果是圆点,则将空地址压入栈;如果是字母,则首先为新结点分配存储空间,将读到的字母存入新结点的数值段中,然后从栈顶弹出两个元素,分别作为新结点的右孩子和左孩子指针,最后将新结点地址压入栈中 练习 扩展后序(extend.c/extend.in/extend.out) 给定一棵二叉树的扩展后序序列,试构造这个二叉树,并输出这个二叉树的前序遍历结果。 样例输入: ..a..b.cd 样例输出: dacb 线索二叉树 遍历二叉树是以一定规则将二叉树中的结点排列成一个线性序列,实质上是对一个非线性结构进行的线性化操作,使得每个结点(第一个和最后一个除外)都有且仅有一个直接前驱和直接后继 如果想知道某棵二叉树中某个结点在某种遍历次序下的前驱或者后继,应该如何做? 线索二叉树 在一棵含有n个结点的二叉树的二叉链表中,总共有2n条指针域,而实际用到的只有n-1条,还有n+1条指向空地址或者表示空地址的值 可以将那些空指针利用起来,让它们指向某种遍历结果中结点的前驱或者后继,例如在结点的空的左孩子指针域中放入某种遍历次序下该结点前驱结点的地址,在结点的空的右孩子指针域中放入某种遍历次序下该结点后继结点的地址,这种附加的指针值称为线索,带线索的二叉树叫线索二叉树 线索二叉树 线索二叉树 当二叉树是用静态的二叉链表表示时,由于结点的地址值是整数,因此可以采用正的下标值来表示指向孩子结点的指针,用负的下标值来表示指向该结点在某种遍历下的前驱或者后继 线索化二叉树 线索化二叉树就是将一个二叉树的存储结构加上线索的过程。 思考:如何将一棵二叉树中序线索化? 利用线索 给定一棵中序线索二叉树,如何迅速查找其中某个结点的前驱或者后继? 在中序线索二叉树中,不需要遍历整个树,可以在较短时间内找出任意结点的前驱或者后继 线索二叉树 思考:给定下面一棵前序线索二叉树,其中对于结点c来通过线索查找它的前驱,能不能找到? 线索二叉树 在前序线索二叉树中,线索对找指定结点在前序序列中的前驱不一定有帮助,因为,某结点在前序序列中的前驱或者是该结点的双亲,或者在以该结点的双亲为根的左子树中,如果该结点有左孩子,则从该结点出发,就不可能沿指针或者线索到达其双亲结点。 类似,在后序线索二叉树中,线索对找指定结点在后序序列中的后继不一定有帮助 练习 查找后继结点(find.c/find.in/find.out) 按扩展后序序列的方式输入一个二叉树,试建立这个二叉树的中序线索结构,并输出其中给定结点的后继结点。在这个二叉树中,不会出现相同结点值的点 输入文件第一行为一串字符,为该二叉树的扩展后序序列,接下来的一行为该二叉树中某个结点的值,输出这个结点在中序遍历次序中的前驱和后继值,如果没有则输出0 样例输入: ..a..b.cd d 样例输出: a b * * d a c b ..a..b.cd a b c f d e 二叉树结构 a c b d e f 前序线索二叉树 0 -6 -3 6 4 3 f e d c b a -5 -3 -2 5 1 2 a c b d e f *

文档评论(0)

1亿VIP精品文档

相关文档