二叉排序树基本用法
来源:互联网 发布:java线程yield 编辑:程序博客网 时间:2024/06/04 18:28
#include <stdio.h>#include <stdlib.h>#define max 50typedef struct liuyu{ int data; struct liuyu *lchild,*rchild;}test;liuyu *root,*p,*q[max];int sum=0;int m=sizeof(test); int count = 0; void insert_data(int x) /*生成二叉排序树*/{ liuyu *p,*q,*s; s=(test*)malloc(m); s->data=x; s->lchild=NULL; s->rchild=NULL; if(!root) { count++; root=s; } p=root; while(p) /*如何接入二叉排序树的适当位置*/ { q=p; if(p->data==x) { //printf("data already exist! \n"); return; } else if(x<p->data) p=p->lchild; else p=p->rchild; }//q是待插入结点的父节点 if(x < q->data) q->lchild=s; else q->rchild=s; count++;}void MainUI(){ printf(" 欢迎进入二叉树的操作界面\n"); printf("1. 数据输入\n"); printf("2. 树的遍历\n"); printf("3. 计算节点个数\n"); printf("4. 按值查找\n"); printf("5. 求树的深度\n"); printf("请选择:");}void pre(liuyu *T){ if(T) { printf("%d ",T->data); pre(T->lchild); pre(T->rchild); }}void center(liuyu *T){ if(T) { center(T->lchild); printf("%d ",T->data); center(T->rchild); } }void after(liuyu *T){ if(T) { after(T->lchild); after(T->rchild); printf("%d ",T->data); } }void insert()//1 插入数据{ int i = 1, x; root=NULL; do { printf("please input data%d:",i); i++; scanf("%d",&x); /*从键盘采集数据,以-9999表示输入结束*/ if(x==-9999){ printf("\n输入结束\n"); } else insert_data(x); /*调用插入数据元素的函数*/ } while(x!=-9999); }void ShowTraverseResult()//2 显示遍历结果{ printf("先序遍历结果:"); pre(root); printf("\n\n"); printf("中序遍历结果:"); center(root); printf("\n\n"); printf("后序遍历结果:"); after(root); printf("\n");}void ShowNodeDigit()//3 显示节点个数{ printf("\n节点个数为:%d\n",count);}void FindValue(liuyu *T, int data)//4 查找值{ liuyu *p = T; while(p) { if(p->data == data) { printf("查找到了\n"); return; } else if(p->data < data) { p = p->rchild; } else if(p->data > data) { p = p->lchild; } } printf("没找到\n"); return;}int FindDeep(liuyu *T){ int deep = 0; int lchilddeep, rchilddeep; if(T) { lchilddeep = FindDeep(T->lchild); rchilddeep = FindDeep(T->rchild); if(lchilddeep > rchilddeep) { deep = lchilddeep+1; } else { deep = rchilddeep + 1; } } return deep;}void main() /*先生成二叉排序树*/{ int i,x, mainchoose; int data; i=1; root=NULL; /*千万别忘了赋初值给root!*/ while(1) { system("cls"); MainUI(); scanf("%d",&mainchoose); if(mainchoose == 1) { insert(); printf("按任意键返回\n"); fflush(stdin); getchar(); } else if(mainchoose == 2) { ShowTraverseResult(); printf("\n按任意键返回\n"); fflush(stdin); getchar(); } else if(mainchoose == 3) { ShowNodeDigit(); printf("\n按任意键返回\n"); fflush(stdin); getchar(); } else if(mainchoose == 4) { printf("请输入要查找的值:"); scanf("%d",&data); FindValue(root, data); printf("\n按任意键返回\n"); fflush(stdin); getchar(); } else if(mainchoose == 5) { printf("%d",FindDeep(root)); printf("\n按任意键返回\n"); fflush(stdin); getchar(); } }}
阅读全文
0 0
- 二叉排序树基本用法
- 二叉排序树的基本操作
- 二叉排序树的基本算法
- 二叉排序树基本操作详解
- 二叉排序树的基本操作
- 二叉排序树的基本操作
- *二叉排序树基本操作*
- 二叉排序树的基本操作
- 二叉排序树的基本操作
- 二叉排序树的基本操作
- 二叉排序树的基本操作
- 树-二叉排序树的基本算法
- 二叉排序树的基本操作测试
- 基于二叉排序树的基本操作
- C++ 二叉排序树基本操作1
- 实现二叉排序树的基本运算算法
- 二叉树基本操作及二叉排序树
- 二叉排序树的基本操作(完整代码)
- request.getRequestDispatcher不能实现页面跳转的原因
- 异常总结
- Android Studio 过滤不需要的Log
- jsp Session
- 程序猿学习第九天,浮动和盒子模型标签属性
- 二叉排序树基本用法
- 【模式识别】贝叶斯分类器的C++实现
- 监听器
- ffmpeg 解码 png apng 图片
- jiebaR中文分词,从入门到喜欢
- 爬虫设置代理
- centos7 五大查找常用命令
- 更改Eclipse下Tomcat的部署目录
- sqlserver 还原出错