欢迎来到天天文库
浏览记录
ID:39393743
大小:16.31 KB
页数:14页
时间:2019-07-02
《二叉树地建立与先序中序后序遍历 求叶子节点个数 求分支节点个数 求二叉树地高度》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实用标准/*一下总结一些二叉树的常见操作:包括建立二叉树先/中/后序遍历二叉树求二叉树的叶子节点个数求二叉树的单分支节点个数计算二叉树双分支节点个数计算二叉树的高度计算二叉树的所有叶子节点数*/#include//c语言的头文件#include//c语言的头文件stdlib.h千万别写错了#defineMaxsize100/*创建二叉树的节点*/typedefstructBTNode//结构体struct是关键字不能省略结构体名字可以省略(为无名结构体)//成员类型可以是基本型或者构
2、造形,最后的为结构体变量。{chardata;structBTNode*lchild,*rchild;}*Bitree;/*使用先序建立二叉树*/BitreeCreatetree()//树的建立{charch;BitreeT;ch=getchar();//输入一个二叉树数据if(ch=='')//''中间有一个空格的。T=NULL;else{T=(Bitree)malloc(sizeof(Bitree));//生成二叉树(分配类型*)malloc(分配元素个数文档大全实用标准*sizeof(分配类型))T->data=c
3、h;T->lchild=Createtree();//递归创建左子树T->rchild=Createtree();//地柜创建右子树}returnT;//返回根节点}/*下面先序遍历二叉树*//*voidpreorder(BitreeT)//先序遍历{if(T){printf("%c-",T->data);preorder(T->lchild);preorder(T->rchild);}}*//*下面先序遍历二叉树非递归算法设计*/voidpreorder(BitreeT)//先序遍历非递归算法设计{文档大全实用标准Bi
4、treest[Maxsize];//定义循环队列存放节点的指针Bitreep;inttop=-1;//栈置空if(T){top++;st[top]=T;//根节点进栈while(top>-1)//栈不空时循环{p=st[top];//栈顶指针出栈top--;printf("%c-",p->data);if(p->rchild!=NULL)//右孩子存在进栈{top++;st[top]=p->rchild;}if(p->lchild!=NULL)//左孩子存在进栈{top++;st[top]=p->lchild;}}pri
5、ntf("");}}文档大全实用标准/*下面中序遍历二叉树*//*voidinorder(BitreeT)//中序遍历{if(T){inorder(T->lchild);printf("%c-",T->data);inorder(T->rchild);}}*//*下面中序遍历二叉树非递归算法设计*/voidinorder(BitreeT)//中序遍历{Bitreest[Maxsize];//定义循环队列,存放节点的指针Bitreep;文档大全实用标准inttop=-1;if(T){p=T;while(top>-1
6、
7、
8、p!=NULL)//栈不空或者*不空是循环{while(p!=NULL)//扫描*p的所有左孩子并进栈{top++;st[top]=p;p=p->lchild;}if(top>-1){p=st[top];//出栈*p节点,它没有右孩子或右孩子已被访问。top--;printf("%c-",p->data);//访问p=p->rchild;//扫描*p的右孩子节点}}printf("");}}文档大全实用标准/*下面后序遍历二叉树*//*voidpostorder(BitreeT)//后序遍历{if(T){postor
9、der(T->lchild);postorder(T->rchild);printf("%c-",T->data);}}*//*二叉树后序遍历非递归算法设计*/voidpostorder(BitreeT)//后序遍历非递归{Bitreest[Maxsize];Bitreep=T,q;intflag;//作为一个标志处理栈定时候用inttop=-1;//栈置空if(T){文档大全实用标准do{while(p)//将*p所在的左节点进栈{top++;st[top]=p;p=p->lchild;}q=NULL;flag=1;/
10、/设置flag=1表示处理栈顶节点while(top!=-1&&flag==1){p=st[top];if(p->rchild==q)//右孩子不存在或者右孩子已被访问,访问之{printf("%c-",p->data);top--;q=p;//让q指向刚被访问的节点}else{p=p->rchild;//p指向右孩
此文档下载收益归作者所有