给一个非递归的吧。

 /*
已知,二叉树存储结构定义见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. PHP-----数组和常见排序算法

    数组的创建 <?php //php创建数组 //第一种方法 $arr[0]=1; $arr[1]=23; $arr[2]=20; $arr[3]=43; for($i=0;$i<count ...

  2. [bzoj3155]Preprefix sum(树状数组)

    3155: Preprefix sum Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 1183  Solved: 546[Submit][Status] ...

  3. python成长之路【第三篇】:函数

    1.函数基础 函数是python为了代码最大程度的重用和最小化代码冗余而提供的基本程序结构. 函数是一种设计工具,它能让程序员将复杂的系统分解为可管理的部件. 函数用于将相关功能打包并参数. pyth ...

  4. (五)socket实践编程

    1.服务器端程序编写 (1)socket(2)bind(3)listen(4)accept,返回值是一个fd,accept正确返回就表示我们已经和前来连接我的客户端之间建立了一个TCP连接了,以后我们 ...

  5. 转:VC include 路径解析

    VC include 路径解析 要了解vc中使用#include命令包含头文件所搜寻的路径,必须先了解vc中的几种路径: 1. 系统路径 系统路径在vc中是"Tools->Option ...

  6. js高级程序设计(五)引用类型

    Object类型 创建Object 实例的方式有两种.第一种是使用new 操作符后跟Object 构造函数. var person = new Object(); person.name = &quo ...

  7. 《Linux内核设计与实现》课本第一章&第二章学习笔记

    <Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件 ...

  8. Launch Screen在iOS7/8中的实现

    Launch Screen在iOS7/8中的实现 目前项目中需要解决的问题是: 兼容iOS7和iOS8,之前的版本不需要支持了 实现兼容3.5.4.4.7和5.5寸屏幕,竖屏的Lauch Screen ...

  9. NGINX location 在配置中的优先级

    location表达式类型 ~ 表示执行一个正则匹配,区分大小写 ~* 表示执行一个正则匹配,不区分大小写 ^~ 表示普通字符匹配.使用前缀匹配.如果匹配成功,则不再匹配其他location. = 进 ...

  10. jquery ajax跨域请求webservice webconfig配置

    <configuration> <system.web> <compilation debug="true" targetFramework=&quo ...