树形结构.pptVIP

  1. 1、本文档共164页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
树形结构

St中元素 算法执行的操作 ch ? 算法结束 ch扫描完毕 空 退栈一次 ) A 退栈一次 ) AC 建立F结点,因k=2,将其作为C结点的右孩子结点 F 生成的二叉树=> (2) 查找结点FindNode(*b,x) 采用先序遍历递归算法查找值为x的结点。找到后返回其指针,否则返回NULL。算法如下: BTNode *FindNode(BTNode *b,ElemType x) { BTNode *p; if (b==NULL) return NULL; else if (b-data==x) return b; else { p=FindNode(b-lchild,x); if (p!=NULL) return p; else return FindNode(b-rchild,x); } } (3) 找孩子结点LchildNode(p)和RchildNode(p) 直接返回*p结点的左孩子结点或右孩子结点的指针。算法如下: BTNode *LchildNode(BTNode *p) { return p-lchild; } BTNode *RchildNode(BTNode *p) { return p-rchild; } (4) 求高度BTNodeDepth(*b) 求二叉树的高度的递归模型f()如下: f(NULL)=0 f(b)=MAX{f(b-lchild),f(b-rchild)}+1 其他情况 对应的算法如下: int BTNodeDepth(BTNode *b) { int lchilddep,rchilddep; if (b==NULL) return(0); /*空树的高度为0*/ else { lchilddep=BTNodeDepth(b-lchild); /*求左子树的高度为lchilddep*/ rchilddep=BTNodeDepth(b-rchild); /*求右子树的高度为rchilddep*/ return(lchilddeprchilddep)? (lchilddep+1):(rchilddep+1); } } (5) 输出二叉树DispBTNode(*b) 其过程是:对于非空二叉树b,先输出其元素值,当存在左孩子结点或右孩子结点时,输出一个“(”符号,然后递归处理左子树,输出一个“,”符号,递归处理右子树,最后输出一个“)”符号。对应的递归算法如下: void DispBTNode(BTNode *b) { if (b!=NULL) { printf(%c,b-data); if (b-lchild!=NULL || b-rchild!=NULL) { printf((); DispBTNode(b-lchild); /*递归处理左子树*/ if (b-rchild!=NULL) printf(,); DispBTNode(b-rchild); /*递归处理右子树*/ printf()); } } } 例7.3 假设二叉树采用二叉链存储结构,设计一个算法判断两棵二叉树是否相似,所谓二叉树t1和t2是相似的指的是t1和t2都是空的二叉树;或者t1和t2的根结点是相似的,以及t1的左子树和t2的左子树是相似的且t1的右子树与t2的右子树是相似的。 解:判断两棵二叉树是否相似的递归模型f()如下: f(t1,t2)=true 若t1=t2=NULL f(t1,t2)=false 若t1、t2之一为NULL,另一不为NULL f(t1,t2)=f(t1-lchild,t2-lchild) 其他情况 f(t1-rchild,t2-rchild) 对应的算法如下: int Like(BTNode *b1,BTNode *b2) /*t1和t2两棵二叉树相似时返回1,否则返回0*/ { int like1,like2; if (b1==NULL b2==NULL) return 1;

文档评论(0)

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

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

1亿VIP精品文档

相关文档