二叉排序树(BST)的建立
给一个非递归的吧。
- /*
- 已知,二叉树存储结构定义见bstree.h,请编写一个算法函数bstree creatBstree(int a[],int n),
- 以数组a中的数据作为输入建立一棵二叉排序树,并将建立的二叉排序树进行中序遍历。
- (提示,a中的原始数据可从data1.txt中读入,实验代码详见lab9_05.c)
- */
- #include "Arrayio.h"
- #include "bstree.h"
- #define N 100
- bstree creatBstree(int a[],int n)
- { /*根据输入的结点序列,建立一棵二叉排序树,并返回根结点的地址*/
- int i, flag;
- bstree root, p, q;
- root = (bstree)malloc(sizeof(bsnode));
- root->key = a[];
- root->lchild = NULL;
- root->rchild = NULL;
- for (i = ; i < n; i++)
- {
- p = root;
- while (true)
- {
- if (a[i]<p->key)
- {
- if (p->lchild != NULL) { p = p->lchild; flag = ; }
- else {flag=;break;}
- }
- else if (a[i]>p->key)
- {
- if (p->rchild != NULL) { p = p->rchild; flag = ; }
- else {flag=;break;}
- }
- else
- {
- flag = -; break;
- }
- }
- q = (bstree)malloc(sizeof(bsnode));
- q->key = a[i];
- q->lchild = NULL;
- q->rchild = NULL;
- if (flag==)
- p->rchild = q;
- else if (flag==)
- p->lchild = q;
- }
- return root;
- }
- int main()
- {
- int n,a[N];
- bstree p,t;
- n=readData(a,N,"data1.txt");
- output(a,n);
- t=creatBstree(a,n); /*创建二叉排序树*/
- printf("中序遍历:\n");
- inorder(t); /*中序遍历二叉排序树*/
- return ;
- }
- /**************************************/
- /* 二叉排序树用的头文件 */
- /* 文件名:bstree.h */
- /**************************************/
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct node1 /*二叉排序树结点定义*/
- {
- int key; /*结点值*/
- struct node1 *lchild,*rchild; /*左、右孩子指针*/
- }bsnode;
- typedef bsnode *bstree;
- /*---中序遍历二叉排序树----*/
- void inorder(bstree t)
- { if (t) { inorder(t->lchild);
- printf("%8d",t->key);
- inorder(t->rchild);
- }
- }
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #define MAX 500000
- /*从文件中读入数据存入数组a*/
- int readData(int a[], int n,char *f ) /*函数返回成功读入的数据个数*/
- {
- FILE *fp;
- int i;
- fp=fopen(f,"r");
- if (fp==NULL) return ;
- else
- {
- for (i=;i<n && !feof(fp);i++)
- fscanf(fp,"%d",&a[i]);
- fclose(fp);
- return i;
- }
- }
- /*存盘函数*/
- void saveData(int a[],int n, char *f )
- {
- FILE *fp;
- int i;
- fp=fopen(f,"w");
- if (fp==NULL) printf("文件建立失败!");
- else
- {
- for (i=;i<n;i++)
- { if (i%==) fprintf(fp,"%c",'\n');
- fprintf(fp,"%8d",a[i]);
- }
- fclose(fp);
- }
- }
- /*输出长度为n的整型数组*/
- void output(int a[],int n)
- { int i;
- printf("\n数组的内容是:\n");
- for (i=;i<n;i++)
- { if (i%==) printf("\n");
- printf("%7d",a[i]);
- }
- printf("\n");
- }
二叉排序树(BST)的建立的更多相关文章
- 二叉排序树(BST)创建,删除,查找操作
binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...
- 二叉排序树(BST)构造与应用
二叉排序树(BST)构造与应用 本文取自<数据结构与算法>(C语言版)(第三版).出版社是清华大学出版社. 本博文作为学习资料整理. 源码是VC+ ...
- 【数据结构】简单谈一谈二分法和二叉排序树BST查找的比较
二分法查找: 『在有序数组的基础上通过折半方法不断缩小查找范围,直至命中或者查询失败.』 二分法的存储要求:要求顺序存储,以便于根据下标随机访问 二分法的时间效率:O(Log(n)) 二分 ...
- 哈夫曼树;二叉树;二叉排序树(BST)
优先队列:priority_queue<Type, Container, Functional>Type 为数据类型, Container 为保存数据的容器,Functional 为元素比 ...
- 二叉排序树BST代码(JAVA)
publicclassTest{ publicstaticvoid main(String[] args){ int[] r =newint[]{5,1,3,4,6,7 ...
- 二叉排序树BST+求树深度算法
#include "stdio.h" #include "malloc.h" typedef struct node { int key; struct nod ...
- 判断二叉树是否二叉排序树(BST)
算法思想:由于二叉排序树的中序遍历可以得到一个有序的序列,因此,我们可以使用中序遍历进行求解. 代码如下: #include <stack> using namespace std; ty ...
- 二叉排序树BST
注意:对一个二叉排序树进行中序遍历时,得到的序列是一个按值从小到大排列的有序序列 查找性能的分析:
- 关于二叉排序树 BST
#include<stdio.h> #include<stdlib.h> typedef struct node { double w; struct node *l,*r; ...
- 4.5---判断是否是二叉排序树BST(CC150)
public boolean checkBST(TreeNode root) { return isBST(root, Long.MIN_VALUE, Long.MAX_VALUE); } publi ...
随机推荐
- JPA入门案例详解(附源码)
1.新建JavaEE Persistence项目
- LTE Module User Documentation(翻译10)——网络连接(Network Attachment)
LTE用户文档 (如有不当的地方,欢迎指正!) 16 Network Attachment(网络连接) 正如前面章节 Basic simulation program 所述,连接用户到基站时通过调 ...
- Json2JsonArray JsonArray2StringArray
public String[] json2JsonArray(String str){ JSONArray jsonArray = JSONArray.fromObject(str); String[ ...
- Karma Police - Radiohead
音乐赏析似乎是一件没有意义的工作,与电影相比音乐更加抽象,不同的人对同一首歌会有完全不同的解读. 但一首歌一旦成为经典,就有解读它的必要,因为它一定诉出了一个群体的某些情绪. Karma police ...
- SPSS数据分析—分段回归
在SPSS非线性回归过程中,我们讲到了损失函数按钮可以自定义损失函数,但是还有一个约束按钮没有讲到,该按钮的功能是对自 定义的损失函数的参数设定条件,这些条件通常是由逻辑表达式组成,这就使得损失函数具 ...
- SPSS数据分析—单因素及多因素方差分析
t检验可以解决单样本.两个样本时的均值比较问题,但是对于两个以上样本,就不能用t检验了,而要使用方差分析.t检验是借助t分布,方差分析是借助F分布,基于变异分解的思想进行. 在算法上,由于线性模型的引 ...
- JavaScipt 源码解析 数据缓存
常见的内存泄露的几种情况: 循环引用 JavaScript闭包 DOM插入 一个DOM对象被一个JavaScript对象引用,同时又引用同一个或其他的JavaScript对象,这个DOM对象可能回引发 ...
- 读javascript高级程序设计07-引用类型、Object、Array
一.引用类型 ECMAScript是支持面向对象的,可以通过引用类型描述一类对象所具有的属性和方法. 创建对象实例的方法时是用new 操作符加构造函数:var p=new Person(). 二.Ob ...
- checkbox --jquery
<input type="checkbox" value="2" class="ace ace-checkbox-2" id='ass ...
- HTML5 WebSocket 实时推送信息测试demo
测试一下HTML5的websocket功能,实现了客户端→服务器实时推送信息到客户端,包括推送图片: websocket实现MessageInbound类 onTextMessage()/onBina ...