给一个非递归的吧。

 /*
已知,二叉树存储结构定义见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)的建立的更多相关文章

  1. 二叉排序树(BST)创建,删除,查找操作

    binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...

  2. 二叉排序树(BST)构造与应用

             二叉排序树(BST)构造与应用       本文取自<数据结构与算法>(C语言版)(第三版).出版社是清华大学出版社.       本博文作为学习资料整理. 源码是VC+ ...

  3. 【数据结构】简单谈一谈二分法和二叉排序树BST查找的比较

    二分法查找: 『在有序数组的基础上通过折半方法不断缩小查找范围,直至命中或者查询失败.』   二分法的存储要求:要求顺序存储,以便于根据下标随机访问   二分法的时间效率:O(Log(n))   二分 ...

  4. 哈夫曼树;二叉树;二叉排序树(BST)

    优先队列:priority_queue<Type, Container, Functional>Type 为数据类型, Container 为保存数据的容器,Functional 为元素比 ...

  5. 二叉排序树BST代码(JAVA)

        publicclassTest{     publicstaticvoid main(String[] args){         int[] r =newint[]{5,1,3,4,6,7 ...

  6. 二叉排序树BST+求树深度算法

    #include "stdio.h" #include "malloc.h" typedef struct node { int key; struct nod ...

  7. 判断二叉树是否二叉排序树(BST)

    算法思想:由于二叉排序树的中序遍历可以得到一个有序的序列,因此,我们可以使用中序遍历进行求解. 代码如下: #include <stack> using namespace std; ty ...

  8. 二叉排序树BST

    注意:对一个二叉排序树进行中序遍历时,得到的序列是一个按值从小到大排列的有序序列 查找性能的分析:

  9. 关于二叉排序树 BST

    #include<stdio.h> #include<stdlib.h> typedef struct node { double w; struct node *l,*r; ...

  10. 4.5---判断是否是二叉排序树BST(CC150)

    public boolean checkBST(TreeNode root) { return isBST(root, Long.MIN_VALUE, Long.MAX_VALUE); } publi ...

随机推荐

  1. Android ListView简单实用

    layout创建: activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/ ...

  2. Navicat for mysql 破解

    想用navicat for mysql 连接mysql,发现只能试用30天,感觉挺不爽的,购买的话发现价格一千多,好贵的软件. 所以想要破解一下,网上试了一些方法不行,最后找到了一种方法可以的 破解工 ...

  3. sql语句中left join、inner join中的on与where的区别

    table a(id, type): id     type ---------------------------------- 1      1 2      1 3      2 table b ...

  4. 分部类(partial)

    一般来说,一个类.结构或接口位于一个源文件中,但某些情况,比如大型项目.特殊部署时,可能需要把一个类.结构或接口放在几个文件中来处理.等到编译时,自动把它们合起来,这就得应用 C# 分部类了. C# ...

  5. JavaScript基础知识汇总

    1. 图片热区: <img src="logo.jpg" usemap="#logo"> <map id="logo" n ...

  6. SurfaceOutput

    下面着重分析一下surface shader中是如何使用BlinnPhong光照模型的,为以后写代码做铺垫.源文件取自Unity3D官网下载的builtin_shaders, 源文件名为Normal- ...

  7. $.post 请求一直转圈圈,谷歌浏览器状态一直为canceled

    最开始写的是 $.post("url",{},function(){},"json") 用火狐浏览器 测试发现请求一直在转圈圈 ,就在action输出 发现也进 ...

  8. A:石头剪刀布

    总时间限制: 1000ms 内存限制: 65536kB描述石头剪刀布是常见的猜拳游戏.石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.一天,小A和小B正好在玩石头剪刀布.已知他们的出拳 ...

  9. js框架简明

    jquery 主要战场还是在dom这块.其它经典怀旧的2个需要了解一下,mootools, prototype.是他们启发了js向工程化,团队化,协作化发展的转变,yui虽然听说停止开发了,但他的代码 ...

  10. Linux设备驱动中的并发控制

    1.并发是指多个执行单元同时.并行的执行.并发的执行单元对共享资源的访问很容易导致竞态. 在 Linux 内核中,主要的竞态发生于如下几种情况: ①对称多处理器(SMP)的多个 CPU ②单CPU内进 ...