收藏 分享(赏)

假设二叉树采用二叉链存储结构存储.doc

上传人:精品资料 文档编号:10815843 上传时间:2020-01-11 格式:DOC 页数:7 大小:44.68KB
下载 相关 举报
假设二叉树采用二叉链存储结构存储.doc_第1页
第1页 / 共7页
假设二叉树采用二叉链存储结构存储.doc_第2页
第2页 / 共7页
假设二叉树采用二叉链存储结构存储.doc_第3页
第3页 / 共7页
假设二叉树采用二叉链存储结构存储.doc_第4页
第4页 / 共7页
假设二叉树采用二叉链存储结构存储.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、假设二叉树采用二叉链存储结构存储,分别实现以下算法,并在程序中完成测试: (1)计算二叉树节点个数;(2)输出所有叶子节点; (3)求二叉树 b 的叶子节点个数;(4)求二叉树 b 的宽度 #include #include #define MaxSize 100typedef char ElemType;typedef struct nodeElemType data; /数据元素struct node *lchild; /指向左孩子struct node *rchild; /指向右孩子 BTNode;void CreateBTNode(BTNode * /由str串创建二叉链BTNode

2、*FindNode(BTNode *b,ElemType x); /返回data域为x的节点指针BTNode *LchildNode(BTNode *p); /返回*p节点的左孩子节点指针BTNode *RchildNode(BTNode *p); /返回*p节点的右孩子节点指针int BTNodeDepth(BTNode *b); /求二叉树b的深度void DispBTNode(BTNode *b); /以括号表示法输出二叉树void DestroyBTNode(BTNode * /销毁二叉树void LevelOrder(BTNode *b)BTNode *p;BTNode *quMax

3、Size; /定义环形队列,存放节点指针int front,rear; /定义队头和队尾指针front=rear=-1; /置队列为空队列rear+;qurear=b; /根节点指针进入队列while (front!=rear) /队列不为空front=(front+1)%MaxSize;p=qufront; /队头出队列printf(“%c “,p-data); /访问节点if (p-lchild!=NULL) /有左孩子时将其进队rear=(rear+1)%MaxSize;qurear=p-lchild;if (p-rchild!=NULL) /有右孩子时将其进队rear=(rear+1)

4、%MaxSize;qurear=p-rchild;void CreateBTNode(BTNode *int top=-1,k,j=0;char ch;b=NULL; /建立的二叉树初始时为空ch=strj;while (ch!=0) /str未扫描完时循环switch(ch)case (:top+;Sttop=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=NUL

5、L) /p指向二叉树的根节点b=p;else /已建立二叉树根节点switch(k)case 1:Sttop-lchild=p;break;case 2:Sttop-rchild=p;break;j+;ch=strj;BTNode *FindNode(BTNode *b,ElemType x) /返回data域为x的节点指针BTNode *p;if (b=NULL)return NULL;else if (b-data=x)return b;elsep=FindNode(b-lchild,x);if (p!=NULL)return p;elsereturn FindNode(b-rchild,

6、x);BTNode *LchildNode(BTNode *p) /返回*p节点的左孩子节点指针return p-lchild;BTNode *RchildNode(BTNode *p) /返回*p节点的右孩子节点指针return p-rchild;int BTNodeDepth(BTNode *b) /求二叉树b的深度int lchilddep,rchilddep;if (b=NULL)return(0); /空树的高度为0elselchilddep=BTNodeDepth(b-lchild); /求左子树的高度为lchilddeprchilddep=BTNodeDepth(b-rchild

7、); /求右子树的高度为rchilddepreturn (lchilddeprchilddep)? (lchilddep+1):(rchilddep+1);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(“)“);void DestroyBTNod

8、e(BTNode *DestroyBTNode(b-rchild);free(b);void PreOrder1(BTNode *b)BTNode *StMaxSize,*p;int top=-1;if (b!=NULL)top+; /根节点入栈Sttop=b;while (top-1) /栈不为空时循环p=Sttop; /退栈并访问该节点top-;printf(“%c “,p-data);if (p-rchild!=NULL) /右孩子入栈top+;Sttop=p-rchild;if (p-lchild!=NULL) /左孩子入栈top+;Sttop=p-lchild;printf(“n“)

9、;void InOrder1(BTNode *b)BTNode *StMaxSize,*p;int top=-1;if (b!=NULL)p=b;while (top-1 | p!=NULL)while (p!=NULL)top+;Sttop=p;p=p-lchild;if (top-1)p=Sttop;top-;printf(“%c “,p-data);p=p-rchild;printf(“n“);void PostOrder1(BTNode *b)BTNode *StMaxSize;BTNode *p;int flag,top=-1; /栈指针置初值if (b!=NULL)dowhile

10、(b!=NULL) /将t的所有左节点入栈top+;Sttop=b;b=b-lchild;p=NULL; /p指向当前节点的前一个已访问的节点flag=1;while (top!=-1 /取出当前的栈顶元素if (b-rchild=p) /右子树不存在或已被访问,访问之printf(“%c “,b-data); /访问*b节点top-;p=b; /p指向则被访问的节点elseb=b-rchild; /t指向右子树flag=0;while (top!=-1);printf(“n“);int main()BTNode *b;CreateBTNode(b,“A(B(D,E(H(J,K(L,M(,N),C(F,G(,I)“);printf(“二叉树b: “);DispBTNode(b);printf(“n“);printf(“先序遍历序列:n“);PreOrder1(b);printf(“中序遍历序列:n“);InOrder1(b);printf(“后序遍历序列:n“);PostOrder1(b);DestroyBTNode(b);getchar();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报