- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章树和二叉树;树的概念和基本术语;A;树的基本术语;二叉树 (Binary Tree);性质1 在二叉树的第 i 层上至多有 2i -1个结点。(i 1) [证明用归纳法];性质2 深度为k 的二叉树至多有 2 k-1个结点(k 1)。;性质3 对任何一棵二叉树T, 如果其叶结
点数为n0, 度为2的结点数为n2,则n0=n2+1.证明:若度为1的结点有n1 个,总结点个数为n,总边数为e,则根据二叉树的定义,
n = n0 + n1 + n2 e = 2n2 + n1 = n - 1;两种特殊形态的二叉树;2;性质4 具有n (n;性质5 如将一棵有n个结点的完全二叉树自顶向下,同一层自左向右连续给结点编号 1, 2, …, n,则有以下关系:;完全二叉树
的顺序表示;·链表表示;二叉树链表表示的示例;三叉链表的静态结构;typedef char datatype;//结点数据类型;介绍按完全二叉树的层次顺序,依次输入结点信息建立二叉树的算法。
算法的基本思想:
1、依次输入结点信息,若输入的结点不是虚结点,则建立一个新结点。
2、若新结点是第一个结点,则令其为根结点;否则作为孩子连接到其双亲结点上。
3、重复上述过程,至到输入结束信息为止。;为此,设置一个指针类型的数组队列,保存已输入结点的地址。;bitree *Q[maxsize];
bitree *CREATREE( );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)。;·前序遍历二叉树的递归算法;后序遍历右子树(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 );前序遍历二叉树(非递归算法)用栈实现;void PreOrder( bitree *T )
{ stack *S; SETNULL(S); //递归工作栈 bitree * p = T; Push (S, NULL); while ( p != NULL )
{ printf (“%c\n”, p-data ); if ( p-rchild != NULL )
Push ( S, p-rchild ); if ( p-lchild != NULL );·后序遍历二叉树(非递归算法)用栈实现;·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-lchild = p-rchild; p-rchild = temp; unknown ( p-lchild ); p = p-rchild;
}
};使用栈消去递归算法中的两个递归语句;if ( p-rchild != NULL ) push (S, p-rchild ); if ( p-lchild != NULL )
push (S, p-lchild );;ltag=0, lta
您可能关注的文档
最近下载
- 2025届安徽省A10联盟高三上学期开学考-英语试题(含答案).docx VIP
- 周围神经损伤的护理.pptx VIP
- 设计院电气专业面试常见问题汇总与标准答案.pdf VIP
- 2021年福建省福州一中自主招生数学试卷.pdf VIP
- 化学-安徽省1号卷A10联盟2025届高三上学期8月开学摸底考试试题和答案.docx VIP
- 安徽省A10联盟2025届高三上学期8月开学摸底考试生物试卷(含答案).docx VIP
- 2025年营养与膳食.pptx VIP
- 安徽省A10联盟2025届高三上学期8月开学摸底考试地理试卷(含答案).pdf VIP
- 中国通史16.ppt VIP
- 车租赁代驾合同.doc VIP
文档评论(0)