- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分隔符 void PreOrder(BiTree T){ if(T){ printf(%s,T-data); PreOrder(T-lchild); PreOrder(T-rchild); } } 分隔符 * 一、双亲表示法(顺序存储) * 二、孩子表示法 第一种结点格式 第二种结点格式 第一种格式所有节点结构相同,操作方便,但是浪费空间 n个结点度为k的树,有n(k-1)+1个空链 第二种格式节点结构不同,节省空间,操作不方便方便 * 孩子链表: 特点: 顺序+链式存储结构; 找孩子容易,找双亲难 * 孩子双亲表示法 * 三、树的二叉链表存储表示法 定义结点 除放数据元素外,放两个指针,一个指向该结点的第一个孩子,另一个指向该结点的下一个兄弟; 例 * 将树转换成二叉树 A B C D E F G H I A B C D E F G H I 将二叉树转换成树 A B C D E F G H I A B C D E F G H I * 1、统计二叉树中叶子结点的个数 遍历算法的应用举例 void CountLeaf (BiTree T, int count){ if ( T ) { if ((!T-lchild) (!T-rchild)) count++; // 对叶子结点计数 CountLeaf( T-lchild, count); CountLeaf( T-rchild, count); } // if } // CountLeaf * 2、求二叉树的深度 算法基本思想: 从二叉树深度的定义可知: 二叉树的深度应为其左、右子树深度的最大值加1。 int Depth (BiTree T ){ // 返回二叉树的深度 if ( !T ) depthval = 0; else { m = Depth( T-lchild ); n= Depth( T-rchild ); depthval = 1 + (m n ? m : n); } return depthval; } * 仅知二叉树的先序序列“abcdefg”能唯一确定一棵二叉树? 由二叉树的先序和中序序列建树 如果同时已知二叉树的中序序“cbdaegf”,则会如何? 二叉树的先序序列 二叉树的中序序列 左子树 左子树 右子树 右子树 根 根 * a b c d e f g c b d a e g f 例如: a a b b c c d d e e f f g g a b c d e f g ^ ^ ^ ^ ^ ^ ^ ^ 先序序列中序序列 * 已知一棵二叉树的中序序列和后序序列分别是BDCEAFHG 和 DECBHGFA,请画出这棵二叉树。 分析: ①由后序遍历特征,根结点必在后序序列尾部(即A); ②由中序遍历特征,根结点必在其中间,而且其左部必全部是左子树的子孙(即BDCE),其右部必全部是右子树的子孙(即FHG); ③继而,根据后序中的DECB子树可确定B为A的左孩子,根据HGF子串可确定F为A的右孩子;以此类推。 * 已知中序遍历:B D C E A F H G 已知后序遍历:D E C B H G F A (B D C E) ( F H G) A (D C E) B F G H C D E A B B 已知中序遍历和后序遍历结果,画出二叉树(或给出先序遍历结果) A C C D C E Status InorderTraverse(bitree T){ Initstack(S); push(S,T); While(!stackempty(S)){ while(GetTop(S,p)p) push(S,p-lchild);//向左走到尽头 pop(S,p); //空指针退栈 if(!stackempty(S)){ pop(S,p); printf(p-data);//访问结点,向右一步 push(S,p-rchild); } } return OK; } 中序遍历的非递归算法描述 * 什么是线索二叉树? 线索链表的遍历算法 如何建立线索链表? 线索二叉树 * 什么是线索二叉树? n个结点二叉树,有n+1个空指针,这些空指针如果用来指向其前驱或者后继,就可提高遍历的效率 - + / a * b - e f c d 先序遍历: 中序遍历: 后序遍历: -+a*b-cd/ef a+b*c-d-e/f abcd
文档评论(0)