- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
BiTreebt;a二叉树-西安科技大学精品课程网
第六章 二叉树和树 第六章 二叉树和树 6.1 二叉树 性质5: 对于具有n个结点的完全二叉树,如果按照从上至下和从左到右的顺序对二叉树中的所有结点从1开始顺序编号,则对于任意的序号为i的结点,有: (1) 如果i??1,则序号为i的结点的双亲结点的序号为i/2(“/”表示整除);如果i?=?1,则序号为i的结点是根结点,无双亲结点。 (2) 如果2i≤n,则序号为i的结点的左孩子结点的序号为2i;如果2i>n,则序号为i的结点无左孩子。 (3) 如果2i+1≤n,则序号为i的结点的右孩子结点的序号为2i+1;如果2i+1>n,则序号为i的结点无右孩子。 证明 对于(1),很明显,i?=?1时就是根节点。i>1时,比如结点7,它的双亲是7/2?=?3;结点9,它的双亲是9/2?=?4。 对于(2),比如结点6,因为2?×?6?=?12超过了结点个数10,所以结点6没有左孩子,它是叶子结点;同样结点5,因为2?×?5?=?10没有超过结点个数10,所有它有左孩子,左孩子结点为10。 证明 对于(3),比如结点5,2×5+1=11超过了结点个数10,所以结点5没有右孩子;结点3,2×3+1=7没有超过结点个数10,所以结点3有右孩子,右孩子是结点7。 当然,我们可以用数学归纳法证明。 当i=1时,由完全二叉树的定义知,如果2i=2≤n,说明二叉树中存在两个或两个以上的结点,所以其左孩子存在且序号为2;反之,如果2>n,说明二叉树中不存在序号为2的结点,其左孩子不存在。同理,如果2i+1=3≤n,说明其右孩子存在且序号为3;如果3>n,则二叉树中不存在序号为3的结点,其右孩子不存在。 假设对于序号为j(1≤j<n)的结点,当2j≤n时,其左孩子存在且序号为2j,当2j>n时,其左孩子不存在;当2j+1≤n时,其右孩子存在且序号为2j+1,当2j+1>n时,其右孩子不存在。 当i=j+1时,根据完全二叉树的定义,若其左孩子结点存在,则其左孩子结点的序号一定等于序号为j的结点的右孩子的序号加1,即其左孩子结点的序号等于 (2j+1)+1=2(j+1)=2i,且有2i≤n; 如果2i>n,则左孩子不存在。若右孩子结点存在,则其右孩子结点的序号应等于其左孩子结点的序号加1,即右孩子结点的序号为2i+1,且有2i+1≤n;如果2i+1>n,则右孩子不存在。故性质5的(2)和(3)得证。 由性质5的(2)和(3)我们可以很容易证明性质5的(1)。 当i=1时,显然该结点为根结点,无双亲结点。 当i>1时,设序号为i的结点的双亲结点的序号为m,如果序号为i的结点是其双亲结点的左孩子,根据(2)有i=2m,即m=i/2;如果序号为i的结点是其双亲结点的右孩子,根据(3)有i=2m+1,即m=(i-1)/2=i/2-1/2 综合这两种情况,可以得到,当i??1时,其双亲结点的序号等于i/2。 第23讲 8 void PreInOd(char preod[],char inod[],int i, int j, int k, int h,BiTree *t) 9 { /*以先序序列preod[i..j],中序序列inod[k..h]恢复二叉树*t */ 10 *t=(BiTNode *)malloc(sizeof(BiTNode)); 11 *t-data=preod[i]; 12 m=k; 13 while(inod[m]!=preod[i]) 14 m++; /*在inod[]中查找preod[i] */ 15 if(m==k) 16 *t-lchild=NULL 17 else 18 PreInOd(preod, inod, i+1, i+m-k, k, m-1, t-lchild); 19 if(m= =h) 20 *t-rchild=NULL 21 else 22 PreInOd(preod, inod, i+m-k+1, j, m+1, h, t-rchild); 23 } 25讲 利用“扩展先序遍历序列”创建二叉链表的算法如下: 1 void CreateBiTree(BiTree *bt) 2 { /*先序遍历
您可能关注的文档
- EMC存储系统在天津测震台网JOPENS.DOC
- EDA主要供应商VHDL仿真行为综合逻辑综合可测性设计低功耗设计.PPT
- ER模型624常用的数据模型63数据库系统的体系结构631数据库.PPT
- Escalationforunresolvedcase遗留问题逐级解决方案Senior.PPT
- eClass家长户口登入页面-民生书院小学-MunsangCollege.PPT
- F86馈线终端控制器介绍-Read.PPT
- FMEA实战课程大纲-深圳智慧之光研发和质量管理咨询有限.DOC
- Flash动画制作Flash动画制作入门Flash的界面如何启动.DOC
- FMEA潜在失效模式及后果分析高级研修班-上海企航科技咨询有限公司.DOC
- EMA创业管理分析师-岭东科技大学数位学习平台.PPT
最近下载
- 2025年执业药师继续教育《中国遏制与防治艾滋病规划(2024—2030年)》解读习题答案.docx VIP
- DL-T 5250-2010 汽车起重机安全操作规程.pdf VIP
- 腹股沟疝诊疗指南(2025版)解读PPT课件.pptx VIP
- 第六章 婴幼儿粗大运动发育.pptx
- 非洲鼓乐课件.ppt VIP
- 2023年可行性研究报告财务分析全套计算表格(共18个附表,带公式链接自动计算,操作简单)--银行贷款或债券用.docx VIP
- 地雷使用PPT课件.pptx VIP
- 耳鼻喉科常见疾病诊断与治疗策略.pptx VIP
- 第四章 发育评定.pptx
- DB23T 3469-2023 高寒地区公路工程振动拌和水泥混凝土施工技术规程.pdf VIP
原创力文档


文档评论(0)