网站大量收购独家精品文档,联系QQ:2885784924

数据结构之第12-13讲 树和二叉树B.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构之第12-13讲 树和二叉树B

第6章 树和二叉树( Tree Binary Tree ) 课堂讨论: 6.3 遍历二叉树和线索二叉树 例1: 例2:用二叉树表示算术表达式 遍历的算法实现:用递归形式格外简单! 对遍历的分析: 例:【严题集6.42③】编写递归算法,计算二叉树中叶子结点的数目。 注:要实现遍历运算必须先把二叉树存入机内。 习题讨论: 3 中序遍历的非递归(迭代)算法 二叉树遍历的非递归算法 一.先序遍历非递归算法 先序遍历的特点是:首先访问根结点,访问完根后访问左子树,所以对每一个结点,访问完该结点后,沿其左孩子链访问下去,直到左链为空.这时,所有访问过的结点进栈.然后结点出栈,对于每一个出栈结点,即表示该结点和其左子树已经被访问结束,按先序遍历定义,应该访问该结点的右子树. 二.中序遍历非递归算法 中序的 特点是:首先访问左子树,所以对每一个结点,沿左链走下去,直到左链为空,所有经过的结点进栈.然后结点出栈,对于每一个出栈结点,表示该结点的左子树访问结束.按中序遍历的定义,应该访问该结点(根),访问完该结点后,访问该结点的右子树. 三.后序遍历非递归算法 在后序遍历中,当当前指针指向某个结点时,不能马上进行访问,而先要遍历左子树,所以要求该结点进栈保存.当访问完它的左子树后,再次搜索该结点时,还不能进行访问,还要遍历其右子树.所以需要再次将此结点入栈保存.为了区别同一结点的两次入栈,需要引进一个入栈次数的标志.我们约定:标志0为该结点首先入栈,标志1为该结点第二次入栈.为此需要设两个栈:一个栈用来存放结点地址,即为结点栈s1[m],另一个栈用来存放结点进栈标志,即标志栈s2[m],栈指针为同一个. 特别讨论:若已知先序/后序遍历结果和中序遍历结果,能否“恢复”出二叉树? 【严题集6.31④】 证明:由一棵二叉树的先序序列和中序序列可唯一确定这棵二叉树。 中序遍历:B D C E A F H G 后序遍历:D E C B H G F A 问:用二叉链表法(l_child, r_child)存储包含n个结点的二叉树,结点的指针区域中会有多少个空指针? 分析:用二叉链表存储包含n个结点的二叉树,结点必有2n个链域(见二叉链表数据类型说明)。 除根结点外,二叉树中每一个结点有且仅有一个双亲(直接前驱),所以只会有n-1个结点的链域存放指针,指向非空子女结点(即直接后继)。 二、线索二叉树(Threaded Binary Tree) 规 定: 有关线索二叉树的几个术语: 例1:带了两个标志的某先序遍历结果如表所示,请画出对应二叉树。 例2:画出以下二叉树对应的中序线索二叉树。 4.【 考研题】给定如图所示二叉树T,请画出与其对应的中序线索二叉树。 二叉树的二叉线索存储表示 typedef enum {Link, Thread} PointerTag; //Link=0:指针;Thread= 1:线索 typedef struct BiThrNode { TElemType data; struct BiThrNode *lchild,*rchild; //左右孩子指针 PointerTag Ltag,Rtag; //左右标志 }BiThrNode, *BiThrTree; 线索二叉树的生成算法(算法6.6, 见教材P134) 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; //保持pre指向p的前驱 InThreading( p-rchild ); //右子树线索化 } }//InThreading 中序遍历线索二叉树的非递归算法(算法6.6, 见教材P134) status InOrderTraverse_Thr ( BiThrTree T,

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档