给一个非递归的吧。

 /*
已知,二叉树存储结构定义见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");
}

最新文章

  1. Mac OS X 10.8.2终端切换root用户
  2. IOS-Foundation框架结构
  3. git冲突解决
  4. [深入浅出WP8.1(Runtime)]数据绑定的基础
  5. unity访问php
  6. 数据挖掘R与SQL
  7. OC - 15.NSURLSession与NSURLSessionTask
  8. (四)boost库之正则表达式regex
  9. Scala的类中定义内部类实战
  10. ECS活动真实IP (前端存在SLB)
  11. 我的Java开发之路
  12. Eclipse导入hadoop源码
  13. Sysbench 1.0.17安装与测试
  14. 剑指Offer 50. 数组中重复的数字 (数组)
  15. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验四:按键模块③ &mdash; 单击与双击
  16. mongodb之oplog
  17. SQL 分页 SQL SERVER 2008
  18. 华为手机使用objectAnimation异常
  19. 如何设置dedecms自定义表单必填项?
  20. HTML JavaScript 基础学习

热门文章

  1. linux详细redis安装和php中redis扩展
  2. .ipynb文件 与ipython notebook
  3. 描述Linux运行级别0-6的各自含义
  4. DELETE与TRUNCATE的区别
  5. equals方法的小结
  6. python核心编程第六章练习6-14
  7. Ubuntu配置pyethapp
  8. 导出Excel 有身份证时注意
  9. 常用js,css文件统一加载方法,并在加载之后调用回调函数
  10. 把字典的key value 拼接成字符串加上签名加密