二叉排序树(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 ...
随机推荐
- linux应用程序开发-文件编程-库函数
---恢复内容开始--- c库函数文件操作独立于具体的系统平台,可移植性较好. 库函数-创建和打开 FILE*fopen(const char*filename,const char*mode) mo ...
- JQuery_高级选择器
在很多特殊的元素上,比如父子关系的元素,兄弟关系的元素,特殊属性的元素等等. 在早期 CSS 的使用上,由于 IE6 等低版本浏览器不支持,所以这些高级选择器的使用也不具备普遍性,但随着 jQuery ...
- Find a point on a 'line' between two Vector3
Find a point on a 'line' between two Vector3http://forum.unity3d.com/threads/find-a-point-on-a-line- ...
- 003_kafka_主要配置
1.broker配置 2.Producer主要配置 3.Consumer主要配置 出错提示信息: replication factor: 1 larger than available brokers ...
- csu 1804 有向无环图
题目地址 分析:从复杂度来看,一定不可能是枚举和来计算.1e5的规模来看,应该是复杂度比较合适. 我是这么想的,对于三个点,假设1->2有a种走法,2->3有b种走法.那么1->3应 ...
- C# checkboxlist的使用
最近做项目,需要用到checklistbox这一控件,由于对这一控件并不是很熟悉,导致在此浪费了一点时间. http://www.cnblogs.com/hongfei/archive/2012/12 ...
- easyui-menu 宽度自适应
easyui-menu里的菜单项是从后端获取的,而这个组件提供的API配置只能设置一个固定宽度,当获取的菜单项字数较多时有可能显示不全.解决方法如下: <style> .myClass{f ...
- iOS_autoLayout_Masonry
概述 Masonry是一个轻量级的布局框架与更好的包装AutoLayout语法. Masonry有它自己的布局方式,描述NSLayoutConstraints使布局代码更简洁易读. ...
- NSRunLoop概述和原理
1.什么是NSRunLoop?我们会经常看到这样的代码: - (IBAction)start:(id)sender{pageStillLoading = YES;[NSThread detachNew ...
- Rhel6-varnish配置文档
系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 192.168.122.160:virnish apache server60.example ...