给一个非递归的吧。

  1. /*
  2. 已知,二叉树存储结构定义见bstree.h,请编写一个算法函数bstree creatBstree(int a[],int n),
  3. 以数组a中的数据作为输入建立一棵二叉排序树,并将建立的二叉排序树进行中序遍历。
  4. (提示,a中的原始数据可从data1.txt中读入,实验代码详见lab9_05.c)
  5. */
  6.  
  7. #include "Arrayio.h"
  8. #include "bstree.h"
  9. #define N 100
  10. bstree creatBstree(int a[],int n)
  11. { /*根据输入的结点序列,建立一棵二叉排序树,并返回根结点的地址*/
  12. int i, flag;
  13. bstree root, p, q;
  14. root = (bstree)malloc(sizeof(bsnode));
  15. root->key = a[];
  16. root->lchild = NULL;
  17. root->rchild = NULL;
  18. for (i = ; i < n; i++)
  19. {
  20. p = root;
  21. while (true)
  22. {
  23. if (a[i]<p->key)
  24. {
  25. if (p->lchild != NULL) { p = p->lchild; flag = ; }
  26. else {flag=;break;}
  27. }
  28. else if (a[i]>p->key)
  29. {
  30. if (p->rchild != NULL) { p = p->rchild; flag = ; }
  31. else {flag=;break;}
  32. }
  33. else
  34. {
  35. flag = -; break;
  36. }
  37. }
  38. q = (bstree)malloc(sizeof(bsnode));
  39. q->key = a[i];
  40. q->lchild = NULL;
  41. q->rchild = NULL;
  42. if (flag==)
  43. p->rchild = q;
  44. else if (flag==)
  45. p->lchild = q;
  46. }
  47. return root;
  48. }
  49.  
  50. int main()
  51. {
  52. int n,a[N];
  53. bstree p,t;
  54. n=readData(a,N,"data1.txt");
  55. output(a,n);
  56. t=creatBstree(a,n); /*创建二叉排序树*/
  57. printf("中序遍历:\n");
  58. inorder(t); /*中序遍历二叉排序树*/
  59.  
  60. return ;
  61. }
  1. /**************************************/
  2. /* 二叉排序树用的头文件 */
  3. /* 文件名:bstree.h */
  4. /**************************************/
  5. #include<stdio.h>
  6. #include<stdlib.h>
  7. typedef struct node1 /*二叉排序树结点定义*/
  8. {
  9. int key; /*结点值*/
  10. struct node1 *lchild,*rchild; /*左、右孩子指针*/
  11. }bsnode;
  12. typedef bsnode *bstree;
  13.  
  14. /*---中序遍历二叉排序树----*/
  15. void inorder(bstree t)
  16. { if (t) { inorder(t->lchild);
  17. printf("%8d",t->key);
  18. inorder(t->rchild);
  19. }
  20.  
  21. }
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define MAX 500000
  5.  
  6. /*从文件中读入数据存入数组a*/
  7. int readData(int a[], int n,char *f ) /*函数返回成功读入的数据个数*/
  8. {
  9. FILE *fp;
  10. int i;
  11. fp=fopen(f,"r");
  12. if (fp==NULL) return ;
  13. else
  14. {
  15. for (i=;i<n && !feof(fp);i++)
  16. fscanf(fp,"%d",&a[i]);
  17. fclose(fp);
  18. return i;
  19. }
  20. }
  21.  
  22. /*存盘函数*/
  23. void saveData(int a[],int n, char *f )
  24. {
  25. FILE *fp;
  26. int i;
  27. fp=fopen(f,"w");
  28. if (fp==NULL) printf("文件建立失败!");
  29. else
  30. {
  31. for (i=;i<n;i++)
  32. { if (i%==) fprintf(fp,"%c",'\n');
  33. fprintf(fp,"%8d",a[i]);
  34. }
  35. fclose(fp);
  36. }
  37. }
  38.  
  39. /*输出长度为n的整型数组*/
  40. void output(int a[],int n)
  41. { int i;
  42. printf("\n数组的内容是:\n");
  43. for (i=;i<n;i++)
  44. { if (i%==) printf("\n");
  45. printf("%7d",a[i]);
  46. }
  47. printf("\n");
  48. }

二叉排序树(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. JPA入门案例详解(附源码)

    1.新建JavaEE Persistence项目

  2. LTE Module User Documentation(翻译10)——网络连接(Network Attachment)

    LTE用户文档 (如有不当的地方,欢迎指正!) 16 Network Attachment(网络连接)   正如前面章节 Basic simulation program 所述,连接用户到基站时通过调 ...

  3. Json2JsonArray JsonArray2StringArray

    public String[] json2JsonArray(String str){ JSONArray jsonArray = JSONArray.fromObject(str); String[ ...

  4. Karma Police - Radiohead

    音乐赏析似乎是一件没有意义的工作,与电影相比音乐更加抽象,不同的人对同一首歌会有完全不同的解读. 但一首歌一旦成为经典,就有解读它的必要,因为它一定诉出了一个群体的某些情绪. Karma police ...

  5. SPSS数据分析—分段回归

    在SPSS非线性回归过程中,我们讲到了损失函数按钮可以自定义损失函数,但是还有一个约束按钮没有讲到,该按钮的功能是对自 定义的损失函数的参数设定条件,这些条件通常是由逻辑表达式组成,这就使得损失函数具 ...

  6. SPSS数据分析—单因素及多因素方差分析

    t检验可以解决单样本.两个样本时的均值比较问题,但是对于两个以上样本,就不能用t检验了,而要使用方差分析.t检验是借助t分布,方差分析是借助F分布,基于变异分解的思想进行. 在算法上,由于线性模型的引 ...

  7. JavaScipt 源码解析 数据缓存

    常见的内存泄露的几种情况: 循环引用 JavaScript闭包 DOM插入 一个DOM对象被一个JavaScript对象引用,同时又引用同一个或其他的JavaScript对象,这个DOM对象可能回引发 ...

  8. 读javascript高级程序设计07-引用类型、Object、Array

    一.引用类型 ECMAScript是支持面向对象的,可以通过引用类型描述一类对象所具有的属性和方法. 创建对象实例的方法时是用new 操作符加构造函数:var p=new Person(). 二.Ob ...

  9. checkbox --jquery

    <input type="checkbox" value="2" class="ace ace-checkbox-2" id='ass ...

  10. HTML5 WebSocket 实时推送信息测试demo

    测试一下HTML5的websocket功能,实现了客户端→服务器实时推送信息到客户端,包括推送图片: websocket实现MessageInbound类 onTextMessage()/onBina ...