- 1、本文档共85页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章树和二叉树;树的概念和基本术语;A;树的基本术语;二叉树 (Binary Tree);性质1 在二叉树的第 i 层上至多有 2i -1个结
点。(i 1) [证明用归纳法];性质2 深度为k 的二叉树至多有 2 k-1个结点(k 1)。
证明:由性质1可见,深度为k的二叉树的最大结点数为;性质3;两种特殊形态的二叉树;2;0) 个结点的完全二叉树的
+1;性质5 如将一棵有n个结点的完全二叉树自顶向下,同一层自左向右连续给结点编号 1, 2, …, n,则有以下关系:;二叉树的存储结构;·链表表示;二叉树链表表示的示例;三叉链表的静态结构;typedef char datatype; //结点数据类型;介绍按完全二叉树的层次顺序,依次输入结点信息建立二叉树的算法。
算法的基本思想:
1、依次输入结点信息,若输入的结点不是虚结点,则建立一个新结点。
2、若新结点是第一个结点,则令其为根结点;否
则作为孩子连接到其双亲结点上。
3、重复上述过程,至到输入结束信息为止。;为此,设置一个指针类型的数组队列,保存已输入结点的地址。
1、先输入的结点的孩子必定比后输入的结点的孩子先进
队列,因此可利用队头指针front指向当前必须与其孩子结点建立连接的双亲结点,利用队尾指针rear指向当前输入的结点。
2、若rear为偶数,作为左孩子与双亲连接,否则作为右
孩子与双亲连接。
3、若双亲结点或孩子结点为虚结点,则无须连接。
4、若双亲结点与其两个孩子连接完毕,则做出队操作,使头指针指向下一个等待连接的双亲结点。;bitree *Q[maxsize];;rear + + ; Q[rear] = s ;;二叉树遍历;· 中序遍历二叉树算法的定义:
若二叉树为空,则空操作;否则;void InOrder ( bitree *t)
{
if ( t != NULL )
{
InOrder ( t->lchild ); printf(“\t%c\n”, t->data); InOrder ( t->rchild );
}
};否则
访问根结点(D);
前序遍历左子树(L);
前序遍历右子树(R)。;·前序遍历二叉树的递归算法
void PreOrder ( bitree *t )
{
if ( t != NULL )
{
printf(“\t%c\n”,t->data); PreOrder ( t->lchild ); PreOrder ( t->rchild );
}
};否则
后序遍历左子树(L);后序遍历右子树(R);
访问根结点(D)。;·后序遍历二叉树的递归算法:;int Count ( bitree *T )
{
if ( T == NULL ) return 0;
else;int Leaf_Count(Bitree *T)
{//求二叉树中叶子结点的数目
if(!T) return 0; //空树没有叶子
else if(!T->lchild&&!T->rchild)
return 1; //叶子结点
else return Leaf_Count(T.lchild)+Leaf_Count(T.rchild);左子树的叶子数加上右子树的叶子数
};int Height ( bitree * T )
{ int m, n ;
if ( T == NULL ) return -1;
else
{ m = Height ( T->lchild ); n = Height ( T->rchild );
return (m > n) ? m+1 : n+1;
}
};4. 复制二叉树(递归算法);5. 判断二叉树等价(递归算法);中序遍历二叉树(非递归算法)用栈实现;void InOrder ( bitree *T )
{ stack *S; SETNULL( S ); //递归工作栈
bitree *p = T; //初始化
while ( p != NULL || !Empty(S) )
{ if( p != NULL )
{ Push(S, p); p = p->lchild; };前序遍历二叉树(非递归算法)用栈实现;void PreOrder( bitree *T );·后序遍历二叉树(非递归算法)用栈实现;·void PostOrder ( BinTree T ) {;while ( continue && !StackEmpty(&S) ) { Pop (&S, w); p = w.ptr;;练习:交换二叉树各结点的左、右子树 (递归算法);void unknown ( bitree * T )
{ bitree *p = T, *temp;
while ( p != NULL )
{ temp = p->lchild;
p
您可能关注的文档
- 客户化工具—凭证格式设计器培训讲义.pptx
- 软件工程的概论.pptx
- EN ISO 15614-05金属材料焊接工艺规程与评定—焊接工艺试验 中文.pptx
- 呼气末二氧化碳(ETCO2)监测课件.pptx
- 服装制作工技能培训.pptx
- 《python》PPT课件模板新版.pptx
- 老年人急救常识课件.pptx
- 【教学能力比赛】幼儿教育心理学-幼儿注意概述-实施报告.pptx
- 打工族杂志项目推广实操方案.pptx
- 诗意栖居景观-周口碧桂园调研考察报告课件.pptx
- 二年级数学计算题汇编集锦.docx
- 四年级数学(四则混合运算)计算题与答案汇编.docx
- 四年级数学(四则混合运算带括号)计算题与答案汇编.docx
- 三年级数学(上)计算题及答案集锦.docx
- 五年级数学(小数乘法)计算题及答案.docx
- 二年级数学计算题集锦.docx
- 四年级数学(四则混合运算)计算题与答案.docx
- 2023年福建南平市顺昌县事业单位招聘紧缺急需专业人员29人高频考点历年难、易点深度预测(共500题含答案解析)模拟试卷.docx
- 2023年福建省妇幼保健院招聘工作人员高频考点历年难、易点深度预测(共500题含答案解析)模拟试卷.docx
- 2023年上半年浙江温州苍南县事业单位选调工作人员5人高频考点历年难、易点深度预测(共500题含答案解析)模拟试卷.docx
文档评论(0)