数据结构-二叉树 链式 c
来源:互联网 发布:emlog5.3.1源码下载 编辑:程序博客网 时间:2024/06/13 03:44
百度了一下,下面的比较符合个人胃口,具体出处还真忘了,学习。
#include<stdio.h>#include<stdlib.h>typedef struct bitree{int data;struct bitree *lchild;struct bitree *rchild;}bitreenode,*bitreelink;bitreelink creat();//构建二叉树void parent(bitreelink,int);//查询二叉树中某结点的双亲void lchild(bitreelink,int);//查询二叉树中某结点的左孩子void rchild(bitreelink,int);//查询二叉树中某结点的右孩子void lsibling(bitreelink,int);//查询二叉树中某结点的左兄弟结点void rsibling(bitreelink,int);//查询二叉树中某结点的右兄弟结点int main(){bitreelink T;int e,n;do{printf("__________________________________\n");printf("1、构建二叉树\n");printf("2、查询二叉树中某结点的双亲\n");printf("3、查询二叉树中某结点的左孩子\n");printf("4、查询二叉树中某结点的右孩子\n");printf("5、查询二叉树中某结点的左兄弟结点\n");printf("6、查询二叉树中某结点的右兄弟结点\n");printf("__________________________________\n");printf("请输入要选择的操作n:\n");scanf("%d",&n); switch(n){case 1: printf("输入根结点:\n");T=creat();break;case 2:printf("请输入要查询双亲的结点:");scanf("%d",&e);parent(T,e);break;case 3:printf("请输入要查询左孩子的结点:"); scanf("%d",&e); lchild(T,e);break;case 4:printf("请输入姚查询右孩子的结点:"); scanf("%d",&e); rchild(T,e);break;case 5:printf("请输入要查询左兄弟的结点:");scanf("%d",&e);lsibling(T,e);break;case 6:printf("请输入要查询右兄弟的结点:");scanf("%d",&e);rsibling(T,e);break;}}while(n<7);return 0;}/*二叉树的初始化 *其中‘0’表示空节点 */bitreelink creat(){bitreelink T;int data;scanf("%d",&data);if(data==0){T=NULL;}else{T=(bitreelink)malloc(sizeof(bitreenode));if(NULL==T){printf("Error!!");exit(1);}else{T->data=data; printf("输入%d结点的左结点:",T->data); T->lchild=creat(); printf("输入%d结点的右结点:",T->data); T->rchild=creat();}}return T;}/*查询二叉树中某结点的双亲节点*/void parent(bitreelink T,int e){if(T!=NULL){if(T->lchild!=NULL){if(e==T->lchild->data){printf("结点%d的双亲是:%d\n",e,T->data);}else{parent(T->lchild,e);}}if(T->rchild!=NULL){if(e==T->rchild->data){printf("结点%d的双亲是:%d\n",e,T->data);}else{parent(T->rchild,e);}}}}/*查询二叉树中某结点的左孩子*/void lchild(bitreelink T,int e){if(T!=NULL){if(e==T->data){if(T->lchild!=NULL){printf("结点%d的左孩子是:%d \n",e,T->lchild->data);}else{printf("结点%d没有左孩子!!!",e);}}else{//根节点不是目标节点,则遍历左右子树lchild(T->lchild,e);lchild(T->rchild,e);}}}/*查询二叉树中某结点的右孩子*/void rchild(bitreelink T,int e){if(T!=NULL){if(e==T->data){if(T->rchild!=NULL){printf("结点%d的右孩子是:%d \n",e,T->rchild->data);}else{printf("结点%d没有右孩子!!",e);}}else{//跟节点不是目标节点,则遍历左右子树rchild(T->lchild,e);rchild(T->rchild,e);}}}/*查询二叉树中某结点的左兄弟结点*/void lsibling(bitreelink T,int e){if(NULL==T){exit(0);}else{if(T->lchild!=NULL){if(e==T->lchild->data){printf("结点%d没有左兄弟结点!\n",e);}else{lsibling(T->lchild,e);}}if(T->rchild!=NULL){if(e==T->rchild->data){if(T->lchild!=NULL){printf("结点%d的左兄弟结点是:%d\n",e,T->lchild->data);}else{printf("结点%d没有左兄弟结点!!\n",e);}}else{lsibling(T->rchild,e);}}}}/*查询二叉树中某结点的右兄弟结点*/void rsibling(bitreelink T,int e){if(NULL==T){exit(0);}else{if(T->lchild!=NULL){if(e==T->lchild->data){if(T->rchild!=NULL){printf("结点%d的右兄弟结点是:%d",e,T->rchild->data);}else{printf("结点%d没有右兄弟!!!",e);}}else{rsibling(T->lchild,e);}}if(T->rchild!=NULL){if(e==T->rchild->data){printf("结点%d没有右兄弟!!",e);}else{rsibling(T->rchild,e);}}}}
- 数据结构-二叉树 链式 c
- 数据结构 C语言 链式二叉树
- 数据结构C语言实现之二叉树链式结构
- 数据结构 树(二叉树 链式存储)
- 常用数据结构之链式存储二叉树
- 数据结构——链式二叉树
- 【数据结构】二叉树链式结构实现_BiTreeLink
- 数据结构:二叉树的链式存储实现
- 数据结构-->二叉树的链式实现 ADT
- 数据结构——二叉树的链式实现(C语言)
- 数据结构--二叉树--后续遍历二叉树(链式结构)
- 【数据结构】二叉树链式结构--遍历二叉树
- 二叉树链式结构C代码实现
- 二叉树链式存储的C实现
- 链式二叉树的C语言代码
- 链式二叉树的遍历C语言版
- 链式队列(数据结构C#)
- C->数据结构->链式结构
- javascript学习实录 之五(节点操作) --刘小小尘
- hive列
- arm-linux-gcc交叉编译工具的安装
- QGraphicsView
- POJ 1611 The Suspects 并查集
- 数据结构-二叉树 链式 c
- action之间传参为中文
- Linux线程亲缘性
- 如何解决初级软件项目经理的常见错误
- Java从零开始追大牛系列_1_JavaSE基础整理
- Hive中LIKE查询使用通配符'%'的一个BUG--当转义符'\'遇到通配符'%'或'_'
- CentOS
- OpenCv显示窗口移植到MFC
- IBM WebSphere MQ几个特性的应用