- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
例:已知前序遍历序列为ABC,后序遍历序列为CBA,则下列二叉树都满足条件。 A B C A B C 若已知一棵二叉树的前序序列和后序序列,能否唯一确定这棵二叉树呢? 若已知一棵二叉树的前序序列和中序序列,能否唯一确定这棵二叉树呢?怎样确定? 例如:已知一棵二叉树的前序遍历序列和中序遍历序列分别为ABCDEFGHI 和BCAEDGHFI,如何构造该二叉树呢? 前序:A B C D E F G H I中序:B C A E D G H F I 前序:B C 中序:B C B C D E F G H I A 前序: D E F G H I 中序: E D G H F I A B C D E FG HI 前序:F G H I 中序:G H F I 前序: D E F G H I 中序: E D G H F I A B C D E FG HI A B C D E F I G H 2 统计二叉树中叶子结点的个数 先序(或中序或后序)遍历二叉树,在遍历过程中查找叶子结点,并计数。 由此,需在遍历算法中增添一个“计数”的参数,并将算法中“访问结点” 的操作改为:若是叶子,则计数器增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 int CountLeaf (BiTree T){ //返回指针T所指二叉树中所有叶子结点个数 if (!T ) return 0; if (!T-lchild !T-rchild) return 1; else{ m = CountLeaf( T-lchild); n = CountLeaf( T-rchild); return (m+n); } //else } // CountLeaf 3、求二叉树的深度(后序遍历) 算法基本思想: 从二叉树深度的定义可知,二叉树的深度应为其左、右子树深度的最大值加1。由此,需先分别求得左、右子树的深度,算法中“访问结点”的操作为:求得左、右子树深度的最大值,然后加 1 。 首先分析二叉树的深度和它的左、右子树深度之间的关系。 算法: int BiTreeDepth(BiTree T) { if(T == NULL) return 0; else{ int dep1=BiTreeDepth(T-lchild); int dep2 = BiTreeDepth(T-rchild); return max(dep1,dep2)+1; } } void Depth(BiTree T , int level, int dval){ if ( T ) { if (leveldval) dval = level; Depth( T-lchild, level+1, dval ); Depth( T-rchild, level+1, dval ); } } // 调用之前 level 的初值为 1。 // dval 的初值为 0. 在二叉树不空的前提下,和根结点的元素进行比较,若相等,则找到返回 TRUE; 否则在左子树中进行查找,若找到,则返回 TRUE; 否则继续在右子树中进行查找,若找到,则返回 TRUE,否则返回 FALSE; 4、查询二叉树中某个结点 算法思想: Status Preorder (BiTree T, ElemType x) { // 若二叉树中存在和 x 相同的元素,则 p 指向该结点并返回 OK, // 否则返回 FALSE } if (T) { if (T-data==x) return OK; }//if else return FALSE; else { if (Preorder(T-lchild, x) return OK; else return(Preorder(T-rchild, x)) ; }//else 5 二叉链表的生成 按如
文档评论(0)