第11讲-二叉树遍历算法应用.pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第11讲 二叉树遍历算法应用及树与森林的应用二叉树遍历应用举例 acbedH=1Depth=0(1)求二叉树的树深H=1Depth=1H=2Depth=3H=2Depth=2H=3Depth=3H=3Depth=3层次数和深度变化图利用先序遍历算法求每个结点的层次数,其中最大值即为二叉树的深度。算法:(1)若当前子树不空,执行下列操作;(2)若当前层次数大于求得的深度,则 更改深度值;(3)递归求左子树深度(4)递归求右子树深度void BiTreeDepth(Bitree T, int h, int depth){ if(T) { if(hdepth) depth=h; BiTreeDepth(T-lchild, h+1, depth); BiTreeDepth(T-rchid, h+1, depth); }}二叉树遍历操作应用举例(2)在二叉树中,求指定结点的层数算法算法5.6在二叉树中求指定结点的层数算法: //在二叉树root中求值为ch的结点所在的层数 int preorder(Bnodept root,int ch){ int lev,m,n; if(root==null) lev=0;//空树 else if (root.data==ch) lev=1;//ch所在结点为根结点 else { m=preorder(root.lchild,ch); //在左子树中查找ch所在结点 n=preorder(root.rchild,ch); //在右子树中查找ch所在结点 if (m==0n==0) lev=0; //在左右子树中查找失败 else lev=((mn)?m:n)+1; //在左子树或右子树中查找成功时,层数加1 } return(lev);}二叉树遍历操作应用举例(3)按先序序列建立二叉树的二叉链表abd###ef##g##建立根结点先序建立左子树先序建立右子树Bnodept crt_bt_pre( ) { char ch; Bnodept bt; System.out.println(从键盘上输入一个字符, 用逗号作为结束标志); String s1 = scanner.nextLine(); ch=s1.charAt(0);//从键盘上输入一个字符 if (ch == # ) { return null;//空格作为结束标志 } else{ bt= new Bnodept();//产生新结点 bt.data=ch; bt.lchild= crt_bt_pre(); bt.rchild= crt_bt_pre(); return (bt); }}int countleaf(Bnodept root){ int i; if(root== null) i=0; else if((root.lchild==null)(root.rchild==null)) i=1; else i=countleaf(root.lchild)+countleaf(root.rchild); return(i);}二叉树遍历操作应用举例(4)求二叉树的叶子数 若树为空,则叶子数为0若树只有唯一的根,则叶子数为1否则,树的叶子总数为左子树的叶子数+右子树的叶子数线索二叉树将二叉树线索化Pred leftChild Data rightChild Succ 线索树的结点结构HEACDB ^ E ^ ^ D ^ ^B A C ^二叉树中序线索化的过程AEDCBBDAECH二叉树线索化后得到的双向循环链表adataparentbc009a01fdeb12c13ghid24e25f63g75h85i95一般树的表示—双亲表示法0号单元不用或存结点个数特点寻找父结点只需要O(1)时间可以从一个结点出发,到其父亲,再到其祖父等,从而求出根查询孩子和兄弟的信息困难adatafcbc0^a1fdeb^2c^3ghid^4 7 9 5 4 3 8 2 6e^5f^6^g7h^8i^9一般树的表示—孩子链表示法特点孩子结点的数据域存放它们在数组中的序号便于实现有关孩子及其子孙的运算不便于实现与双亲有关的运算aparentdatafcbc^0a1fde^b12^c13ghi^d24 6 2 5 3 8 7 9 4^2e5^3f6^g57^h58^5i9一般树的表示—双亲孩子链表示法abc ^fde ^ghi g f c eb i d a h ^ ^^^^^^^一般树的表示—孩子兄弟表示法abc^^^^^fde^^ghi d h g f e d a cb g f i a cb e i h^^^^^^^^^^^^^操作容易,但改变了树的层次树与二叉树二叉树树AABBCECDDE C ^ B A ^ ^

文档评论(0)

jyr0221 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档