假设二叉树采用链接存储结构存储,设计一个算法,求二叉树b的宽度.docVIP

假设二叉树采用链接存储结构存储,设计一个算法,求二叉树b的宽度.doc

  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文档。上传文档
查看更多
假设二叉树采用链接存储结构存储,设计一个算法,求二叉树b的宽度

假设二叉树采用链接存储结构存储,设计一个算法,求二叉树b的宽度 程序1 #include stdio.h #include malloc.h #define MaxSize 100 typedef char ElemType; typedef struct node { ElemType data; //数据元素 struct node *lchild; //指向左孩子 struct node *rchild; //指向右孩子 } BTNode; void CreateBTNode(BTNode *b,char *str) //由str串创建二叉链 { BTNode *St[MaxSize],*p=NULL; int top=-1,k,j=0; char ch; b=NULL; //建立的二叉树初始时为空 ch=str[j]; while (ch!=\0) //str未扫描完时循环 { switch(ch) { case (:top++;St[top]=p;k=1; break; //为左结点 case ):top--;break; case ,:k=2; break; //为右结点 default:p=(BTNode *)malloc(sizeof(BTNode)); p-data=ch;p-lchild=p-rchild=NULL; if (b==NULL) //p指向二叉树的根结点 b=p; else //已建立二叉树根结点 { switch(k) { case 1:St[top]-lchild=p;break; case 2:St[top]-rchild=p;break; } } } j++; ch=str[j]; } } BTNode *FindNode(BTNode *b,ElemType x) //返回data域为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); } } BTNode *LchildNode(BTNode *p) //返回*p结点的左孩子结点指针 { return p-lchild; } BTNode *RchildNode(BTNode *p) //返回*p结点的右孩子结点指针 { return p-rchild; } 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()); } } } int BTWidth(BTNode *b) //求二叉树b的宽度 { struct { int lno; //结点的层次编号 BTNode *p; //结点指针 } Qu[MaxSize]; //定义顺序非循环队列 int front,rear; //定义队首和队尾指针 int lnum,max,i,n; front=rear=0; //置队列为空队 if (b!=NULL) { rear++; Qu[rear].p=b; //根结点指针入队 Qu[rear].lno=1; //根结点的层次编号为 while (rear!=front) //队列不为空 { front++; b=Qu[front].p; //队头出队 lnum=Qu[front].lno; if (b-lchild!=NULL) //左孩子入队 { rear++; Qu[rear].p=b-lchild; Qu[rear].lno=lnum+1; } if (

文档评论(0)

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

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

1亿VIP精品文档

相关文档