- 1、本文档共44页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[]软件技术基础_树
1.3 非线性结构 1.3.1 树 1.3.2 二叉树 ③关于完全二叉树的其他描述形式: 如果对满二叉树的节点从上至下,从左至右连续编号,具有n个节点的完全二叉树各节点与同样深度的满二叉树的前n个节点一一对应 叶节点仅位于下两层,对任一节点,若其右子树的深度为1,则其左子树的深度不小于1 例2:利用二叉树后序遍历计算二叉树结点个数 int size(btreenode *bt) { if(bt==NULL) return(0); else return( 1 + size ( bt -Lchild ) + size ( bt -Rchild ) ); } 例3:建立二叉树 设输入次序:(先序) 以先根遍历算法为基础,修改为二叉树的建立算法 2、哈夫曼树——最优二叉树(路径带权总长最小) 作业: P.75~76:18, 19, 20, 21, 22; 例1:在一棵二叉树中找某结点s的双亲结点t 算法实现:采用中序遍历 btreenode *searchparent(btreenode *s, btreenode *bt) { btreenode *p, *t; p=bt; setnull(stack); if(s==bt) return(NULL); else{ /*s结点为根结点,无双亲,返回空指针*/ while(p!=NULL || !empty(stack)){ if(p!=NULL){ push(stack,p); p=p-Lchild; } else{ p=pop(stack); if(p-Lchild==s || p-Rchild==s){ t=p; p=NULL; setnull(stack); } else p=p-Rchild; } } return(t); } } /*找到双亲结点t*/ Process (P) /*主动结束遍历过程*/ ABC_ _ DEF _ _ G _ _ _ H _ I _ JK _ _ L _ _ A B C _ _ D E F _ _ G _ _ _ H _ I _ J K _ _ L _ _ 每一个空格“_”表示一个空指针 利用先根遍历算法框架,按照遍历顺序,逐个结点地建立二叉树。 根据输入的情况,将新结点放在指定的位置,然后从新结点开始下一个过程;如果输入是空格,则置结点的相应子树指针为空 void c_preorder( root ){ process(root); if( root-Lchild != NULL) c_preorder (root-Lchild); if( root-Rchild != NULL) c_preorder(root-Rchild); } 将新链点挂在root的左子树上; 将新链点挂在root的右子树上; 输入一个值,并生成新链点; 输入一个值,并生成新链点; void create_tree(btreenode ** root){ read( ch ); if ( ch = = ‘ ‘ ){ *root = NULL; return; } p-data = ch; p-Lchild = NULL; p-Rchild = NULL; p = (btreenode *)malloc(sizeof(btreenode)); 输入新元素 生成整个树的根 c_preorder(p); } 以先根遍历算法为基础递归生成二叉树 九、二叉树的重构: 对于一个遍历序列,若没有加空格字符来表示空孩子,则不能根据一个遍历序列构造出二叉树。因为无法从遍历序列中区分二叉树的左右子树。所以必须用两个序列联合才能构造二叉树。 已知先序序列和中序序列,或者已知后序序列和中序序列,可唯一求出一棵二叉树。而已知先序序列和后序序列,则不能唯一求出一棵二叉树。 例:两棵不同的二叉树如图所示: A B C A B C 先序序列相同:ABC后序序列相同:CBA ∵二叉树是有序树,其子树有左、右之分,且次序不能颠倒。 ∴这是两棵不同的二叉树 例:已知一棵二叉树,其 先序序列为:ABCDEFGHIJ 中序序列为:CBDEAFHIGJ 试画出对应的二叉树。 解:按遍历算法可知: 二叉树的根结点为A, 其左子树的先序序列为:BCDE
您可能关注的文档
- []第三章相对密度法.ppt
- []第七章氨基酸代谢新.ppt
- []第九章 相关与回归分析.ppt
- []第二章 单片机硬件结构含作业.ppt
- []第三章 局域网和城域网.ppt
- []第一讲:色彩概论1.ppt
- []第二章均相反应动力学基础1.pdf
- []第二章 自由基聚合.ppt
- []第二章 增值税.ppt
- []第八章 所有者权益的核算--中国农业大学经管学院课件.pdf
- 企业合同管理制度及流程范例(2024版).docx
- 买卖合同01买卖合同范本(2024版).docx
- 2024年云南省昆明市企业人力资源管理师之一级人力资源管理师考试题库及精品答案.docx
- 2024年云南省昆明市企业人力资源管理师之一级人力资源管理师考试含答案(模拟题).docx
- 2024年云南省迪庆藏族自治州企业人力资源管理师之一级人力资源管理师考试内部题库精品(夺冠).docx
- 2024年云南省红河哈尼族彝族自治州企业人力资源管理师之四级人力资源管理师考试题库大全含下载答案.docx
- 2024年云南省红河哈尼族彝族自治州企业人力资源管理师之一级人力资源管理师考试真题题库(名师系列).docx
- 2024年云南省迪庆藏族自治州企业人力资源管理师之四级人力资源管理师考试优选题库带答案(基础题).docx
- 2024年人教版四4年级下册数学期末解答复习及答案图文 .pdf
- 2024年云南省玉溪市企业人力资源管理师之一级人力资源管理师考试题库精品(考点梳理).docx
文档评论(0)