二叉树的遍历和应用;预备知识—递归;什么是递归?;举例:查词典;递归解决方案的一般形式;举例1:n的阶乘;举例2:逆置字符串;举例3:Hanoi塔;举例4:兔子繁殖(递归法);举例4:兔子繁殖(迭代法);二叉树的遍历;一、问题的提出; 顺着某一条搜索路径巡访二叉树
中的结点,使得每个结点均被访问一
次,而且仅被访问一次。; “遍历”是任何类型均有的操作,
对线性结构而言,只有一条搜索路
径(因为每个结点均只有一个后继),
故不需要另加讨论。而二叉树是非
线性结构,;层次遍历;前序周游(preorder traversal)
若二叉树非空, 则依次进行如下操作:
(1) 访问根结点;
(2) 前序周游左子树;
(3) 前序周游右子树。;中序周游(inorder traversal)
若二叉树非空, 则依次进行如下操作:
(1) 中序周游左子树;
(2) 访问根结点;
(3) 中序周游右子树。;后序周游(postorder traversal)
若二叉树非空, 则依次进行如下操作:
(1) 后序周游左子树;
(2) 后序周游右子树;
(3) 访问根结点。;已知二叉树的前序和中序周游序列如下, 画出该二叉树。
前序周游序列: ABCDEFGHIJ
中序周游序列: CBEDAGHFJI ;已知二叉树的后序和中序周游序列如下, 画出该二叉树。
后序周游序列: ABCDEFG
中序周游序列: ACBGEDF ;画出中序周游序列为ABCDEFGHIJKL的完全二叉树。;上面三种周游方法都可以用递归函数来实现
例如, 前序周游二叉树的函数为:
void preorder(BinNodeElem* subroot)
{
if (subroot == NULL) return;
visit(subroot);
preorder(subroot-left());
preorder(subroot-right());
};课后思考;遍历算法的应用举例;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;Traversal Example;2、求二叉树的深度;求二叉树的深度的
伪代码设计。
;二叉树的存储;存于顺序存储结构;以字符串的形式 根 左子树 右子树
定义一棵二叉树;Status CreateBiTree(BiTree T) {
scanf(ch);
if (ch== ) T = NULL;
else {
if (!(T = (BiTNode *)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T-data = ch; // 生成根结点
CreateBiTree(T-lchild); // 构造左子树
CreateBiTree(T-rchild); // 构造右子树
}
return OK; } // CreateBiTree;A B C D ; 仅知二叉树的先序序列“abcdefg” 不能唯一确定一棵二叉树,;a b c d e f g;void CrtBT(BiTree T, char pre[], char ino[],
int ps, int is, int n ) {
// 已知pre[ps..ps+n-1]为二叉树的先序序列,
// ins[is..is+n-1]为二叉树的中序序列,本算
// 法由此两个序列构造二叉链表
if (n==0) T=NULL;
else {
k=Search(ino, pre[ps]); // 在中序序列中查询
if (k== -1) T=NULL;
else { }
} //
}
您可能关注的文档
最近下载
- 统编版(26春)小学道德与法治二年级下册16《实现梦想从现在做起》教学课件.pptx VIP
- 《石油化工行业生产装置维护维修费用定额》2004版解读.pdf
- 2022年广东省中考英语试题(含答案解析).pdf VIP
- 零星维修批量发包企业入围项目服务方案.doc VIP
- 【校本教案】英语小故事:Arthur's Bad news Day校本教案.doc VIP
- 2026春教科版二年级下册科学实验报告(14 篇).doc VIP
- (苏教版)三年级科学下册《雨下得有多大》教学完整ppt课件课件下载.ppt VIP
- 《改造我们的学习》27张课件.pptx VIP
- 学校垃圾清运合同范本5篇 .pdf VIP
- 麒麟操作系统应用与实践-全套PPT课件.pptx
原创力文档

文档评论(0)