数据构造4--树与二叉树.ppt.pptVIP

  • 0
  • 0
  • 约5.86千字
  • 约 22页
  • 2019-01-12 发布于江苏
  • 举报
数据构造4--树与二叉树.ppt

* 第6章 树和二叉树 线索二叉树(Threaded Binary) - + / - a * c d e f b 一棵具有n个结点二叉树,用二叉链表表示时,树中存在空指针域的个数为:n+1 利用空指针域指向结点的前驱或后继 结点结构 lchild rchild ltag data rtag 其中:ltag = 0 lchild指向结点的左孩子 ltag = 1 lchild指向结点的前驱 rtag = 0 rchild指向结点的右孩子 rtag = 1 rchild指向结点的后继 以这种结构构成的二叉链表叫线索链表,其中指向前驱和后继的指针称作线索,加上线索的二叉树成为线索二叉树。 二叉树的二叉线索存储表示 Typedef enum { Link , Thread } PointerTag ; Typedef struct BiThrNode { TElemType data ; struct BiThrNode * lchild , * rchild ; PointerTag LTag , RTag ; } BiThrNode , * BiThrTree ; - + / - a * c d e f b 0 1 - 0 0 + 0 0 / 0 0 e 1 1 a 1 1 * 0 0 f 1 1 b 1 1 - 0 0 c 1 1 d 1 1 thrt bt 例如: 中序序列:a+b*c-d-e/f Status InOrderTraverse_Thr(BiThrTree T,Status(*Visit)(TElemType e)) { P = T - lchild ; while ( p != T ) { while ( p - LTag = = Link ) p = p - lchild ; if ( ! Visit ( p - data ) ) return ERROR; while ( p - RTag = = Thread p - rchild != T) { p = p - rchild ; Visit ( p - data ) ; } p = p - rchild ; } return OK } 中序序列:a+b*c-d-e/f 0 1 - 0 0 + 0 0 / 0 0 e 1 1 a 1 1 * 0 0 f 1 1 b 1 1 - 0 0 c 1 1 d 1 1 thrt bt 线索化二叉树 0 1 thrt 空线索化二叉树 Status InOrderThreading ( BiThrTree Thrt , BiThrTree T ) { if ( ! ( Thrt = ( BiThrTree ) malloc ( sizeof ( BithrNode ) ) ) ) exit ( OVERFLOW ) ; Thrt - LTag = Link ; Thrt - Rtag = Thread ; Thrt - rchild = Thrt ; if ( !T ) Thrt - lchild = Thrt ; else { Thrt - lchild = T ; pre = Thrt ; InThreading ( T ) ; pre - rchild = Thrt ; pre - RTag = Thread ; Thrt - rchild = pre ; } return OK } void InThreading ( BiThrTree p ) { if ( p ) { InThreading ( p - lchild ) ; if ( !p-lchild ) {p-LTag=Thread ; p-lchild=pre ; } if ( !pre-rchild ) {pre-RTag=Thread ;pre-rchild=p; } pre = p ; InThreading ( p - rchild ) ; } } 0 1 - 0 0 + 0 0 / 0 0 e 1 1 a 1 1 * 0 0 f 1 1 b 1 1 - 0 0 c 1 1 d 1 1 thrt bt 例:求中序线索树中给定结点的后继结点 BiThrT

文档评论(0)

1亿VIP精品文档

相关文档