




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
二叉树遍历及其算法主讲人:程玉胜2008.06.17《数据结构》申报精品课程录像1/39内容提要
复习二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法
复习二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法2/39复习二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法复习二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法内容提要3/39(一)
二叉树的定义度不大于2,且子树有左右之分,不能颠倒二叉树的5种基本形态DDLDLRDR(a)(b)(c)(d)(e)复习二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法4/39(一)
二叉树性质应用(1)如果一棵二叉树有10个叶子结点,有8个结点仅有左孩子,12个结点仅有右孩子,问该二叉树有多少个结点?复习二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法思考解易知:n=n0+n1+n2已知:n0=10,n1=8+12=20P124,性质3知:n2=n0-1=9所以,n=10+20+9=395/39(一)
二叉树性质应用(2)已知完全二叉树有100个结点,则该二叉树有多少个叶子结点?复习二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法思考解1P124,性质4知:树的深度1+log2100=7P124,性质2知:上面6层结点数26-1=63所以,第7层有100-63=37个叶子它们是第6层中19个结点的孩子,因此第6层中没有孩子的结点是32-19=13所以,叶子结点数37+13=50第6层26-1=326/39(一)
二叉树性质应用(2)已知完全二叉树有100个结点,则该二叉树有多少个叶子结点?复习二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法思考解2P124,性质5知:编号100的结点父亲是100/2=50因此从51~100是叶子结点所以,叶子结点数100-50=50i2i+12ii/27/39内容提要
复习二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法复习二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法8/39
复习
二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法
复习
二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法内容提要9/39(二)
二叉树存储结构(1)
复习
二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法顺序存储结构abcdabcd…二叉链表存储结构typedefchardatatypetypedef
struct
BiTNode{datatypedata;
struct
BiTNode*lchild,*rchild;//左右指针}10/39(二)
二叉树存储结构(2)
复习
二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法二叉链表存储结构a^b^c^^d^图有多少个空指针?5在n个结点的二叉链表中,空(^)指针数有多少个?思考解n个结点,共有2n个指针其中,n-1个结点有父亲(根除外)所以,2n-(n-1)=n+1n+111/39(二)
二叉树遍历方法
复习
二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法遍历二叉树定义:指按照某种顺序访问二叉树的每个结点一次且仅被“访问”一次。常见“访问”的方法:voidvisit(datatypee){printf(e);}//实际使用时,加上格式控制符DLR遍历时,限定先左后右:
LDR;DLR;LRD12/39(二)
先序遍历算法
复习
二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法
先序(DLR)遍历
(2)遍历左子树(L)(3)遍历右子树(R)
(1)访问根结点(D)
voidPreOrder(struct
BiTNode*T){if(T!=NULL)
visit(T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);}
13/39(二)
中序遍历算法
复习
二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法
中序(LDR)遍历
(1)遍历左子树(L)(3)遍历右子树(R)
(2)访问根结点(D)
voidInOrder(struct
BiTNode*T){if(T!=NULL)
InOrder(T->lchild);
visit(T->data);
InOrder(T->rchild);}
14/39(二)
后序遍历算法
复习
二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法
后序(LRD)遍历
(1)遍历左子树(L)(2)遍历右子树(R)
(3)访问根结点(D)
voidPostOrder(struct
BiTNode*T){if(T!=NULL)
PostOrder(T->lchild);
PostOrder(T->rchild);
visit(T->data);}
15/39内容提要
复习
二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法
复习
二叉树遍历及算法遍历序列求解遍历算法的拓展遍历非递归算法16/39
复习二叉树遍历及算法
遍历序列求解遍历算法的拓展遍历非递归算法
复习二叉树遍历及算法
遍历序列求解遍历算法的拓展遍历非递归算法内容提要17/39(三)
由二叉树求序列
复习二叉树遍历及算法
遍历序列求解遍历算法的拓展遍历非递归算法给出右图的遍历结果序列例1abcefd中序遍历:
(1)a
LR先序遍历:abdcef后序遍历:dbfeca
(2)
Lba
L
ca
LR结果:dbaefc18/39(三)
由序列求二叉树(1)
复习二叉树遍历及算法
遍历序列求解遍历算法的拓展遍历非递归算法已知先序和中序结果,构造二叉树先序:abcdefghij中序:cdbfeaihgj例2由先序结果,二叉树根为a
acdbfeihgj解abgcdfejih19/39(三)
由序列求二叉树(2)
复习二叉树遍历及算法
遍历序列求解遍历算法的拓展遍历非递归算法先序和后序结果,能构造唯一的二叉树吗?思考20/39(三)
算法实现
复习二叉树遍历及算法
遍历序列求解遍历算法的拓展遍历非递归算法(1)建立二叉树struct
BiTNode*CreateBiTree(void){charch;struct
BiTNode*T;ch=getchar();if(ch=='@')T=NULL;else{T=(struct
BiTNode*)malloc(sizeof(struct
BiTNode));T->data=ch;T->lchild=CreateBranchTree();T->rchild=CreateBranchTree();}returnT;}}
上机实现步骤:21/39(三)
算法实现
复习二叉树遍历及算法
遍历序列求解遍历算法的拓展遍历非递归算法(2)主程序中调用main(){struct
BiTNode*head;printf("pleaseinputthenode\n:");head=CreateBranchTree();printf("\n
pre_Order:");pre_Order(head);
printf("\n
mid_Order:");mid_Order(head);
printf("\nlast_Order:");last_Order(head);
getch();}算法实现步骤:[程序演示]22/39内容提要
复习二叉树遍历及算法
遍历序列求解遍历算法的拓展遍历非递归算法
复习二叉树遍历及算法
遍历序列求解遍历算法的拓展遍历非递归算法23/39
复习二叉树遍历及算法遍历序列求解
遍历算法的拓展遍历非递归算法
复习二叉树遍历及算法遍历序列求解
遍历算法的拓展遍历非递归算法内容提要24/39
复习二叉树遍历及算法遍历序列求解
遍历算法的拓展遍历非递归算法(四)
拓展“访问”(1)设计算法按先序次序输出二叉树T中所有叶子结点的值。例3
voidPreOrder(struct
BiTNode*T){if(T!=NULL)
visit(T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);}
解相同:均为先序输出不同:此题有条件输出,叶子的条件是??If(T->lchild==NULL&&T->rchild==NULL)
visit(T->data);25/39
复习二叉树遍历及算法遍历序列求解
遍历算法的拓展遍历非递归算法(四)
拓展“访问”(2)设计算法按后序次序输出二叉树T中前k个结点的值。例4解相同:均为后序输出不同:此题有条件输出,前k个结点的条件是??
n=n+1;If(n<=k)
visit(T->data);
voidPostOrder(struct
BiTNode*T){if(T!=NULL)
PostOrder(T->lchild);
PostOrder(T->rchild);
visit(T->data);}26/39
复习二叉树遍历及算法遍历序列求解
遍历算法的拓展遍历非递归算法(四)
遍历算法拓展(1)设计算法求解给定二叉树的高度。例5解(1)如果T为空,则高度为0;(2)否则,其高度是左右子树中高度的最大值+1int
PostTreeDepth(struct
BiTNode*bt){int
hl,hr,max;if(bt!=NULL){hl=PostTreeDepth(bt->LChild);hr=PostTreeDepth(bt->RChild);max=hl>hr?hl:hr;return(max+1);}elsereturn(0);}后序遍历27/39
复习二叉树遍历及算法遍历序列求解
遍历算法的拓展遍历非递归算法(四)
遍历算法拓展(2)设计算法按照先序次序依次输出二叉树结点值及其所在的层次。例6解先序遍历的拓展如果知道当前结点的层次,那么就知道其孩子结点的层次,因此,在先序遍历算法中增加层次参数voidPrintTree(struct
BiTNode*bt,int
nLayer){if(bt==NULL)return;printf("(%c,%d)",bt->data,nLayer);PrintTree(bt->LChild,nLayer+1);PrintTree(bt->RChild,nLayer+1);}28/39
复习二叉树遍历及算法遍历序列求解
遍历算法的拓展遍历非递归算法(四)
遍历算法综合程序1、求二叉树结点数2、求二叉树叶子结点数思考[程序演示]综合程序29/39内容提要
复习二叉树遍历及算法遍历序列求解
遍历算法的拓展遍历非递归算法
复习二叉树遍历及算法遍历序列求解
遍历算法的拓展遍历非递归算法30/39
复习二叉树遍历及算法遍历序列求解遍历算法的拓展
遍历非递归算法
复习二叉树遍历及算法遍历序列求解遍历算法的拓展
遍历非递归算法内容提要31/39(五)
中序递归过程回顾下图的中序遍历结果例7
复习二叉树遍历及算法遍历序列求解遍历算法的拓展
遍历非递归算法abcefd32/39(五)
中序递归过程mid()表示中序算法中序:dbaefc
mid(a)mid(b)amid(c)mid(d)mid(^)bmid(^)dmid(^)mid(e)cmid(^)mid(^)emid(f)fmid(^)mid(^)
复习二叉树遍历及算法遍历序列求解遍历算法的拓展
遍历非递归算法33/39
复习二叉树遍历及算法遍历序列求解遍历算法的拓展
遍历非递归算法(五)堆栈变化过程par0par0pbr1par0pbr1pdr1par0pbr1输出d……34/39
复习二叉树遍历及算法遍历序列求解遍历算法的拓展
遍历非递归算法(五)非递归算法实现[程序演示]P129,动态创建35/39
复习二叉树遍历及算法遍历序列求解遍历算法的拓展
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国不锈钢餐具行业市场发展分析及发展趋势与投资战略研究报告
- 2025年危化品考核试题附答案
- 2025年天津市建筑安全员B证考试题库附答案
- 无咽鼓管的护理课件
- 2025年工程经济计算题试题及答案
- 护理质量评价标准的培训
- 股权合资公司方案
- 销售项目执行方案
- 骨不连患者护理常规
- 猫咪领养协议合同模板
- 2023年宝应县(中小学、幼儿园)教师招聘笔试题库及答案解析
- 山东中医药大学2020-2021学年内科护理学试题及答案1
- 公司制成检验记录表
- DB32T 4174-2021 城市居住区和单位绿化标准
- 基本原理与性能特点多自由度电磁轴承课件
- Q∕SY 1836-2015 锅炉 加热炉燃油(气)燃烧器及安全联锁保护装置检测规范
- 北京输变电工程标准工艺应用图册(图文并茂)
- 仪器使用记录表
- 石河子大学化学化工学院学院综合测评方案-理学院
- 《汽车电工电子技术》全套教案(完整版)
- 国家职业技能标准 (2021年版) 婴幼儿发展引导员
评论
0/150
提交评论