/*---------------------------------------------------------
 Title: 二叉排序树(Binary Sorting Tree) 
 请先阅读教材 91-93,96-99页, 3.2.3, 3.2.7节, 
 (注意以下程序为简化后的,仅供入门学习之用)
----------------------------------------------------------*/
#include<stdio.h>
#include<stdlib.h>

//定义二叉树的节点结构
struct  node  

    int data;//存放节点数据
    struct node  * lchild,* rchild;//指向左子树和右子树的指针变量
};

//中序遍历二叉树
void  MiddleOrder (struct node *q)

  if (q!=NULL) 
     { 
        MiddleOrder(q->lchild); /*中序遍历左子树*/
        printf("%d ",q->data);  /*访问根结点*/
        MiddleOrder(q->rchild); /*中序遍历右子树*/
      } 
}

//二叉排序树中插入节点
void InsertNode(struct node *p,struct node * pn) /*插入一个新结点的算法*/
{
  if(pn->data<p->data)//小于根节点
   {  
       if (p->lchild==NULL)//左子树为空
           p->lchild=pn;
       else 
           InsertNode(p->lchild,pn);
   }
  else               //大于或等于根节点
   {  
      if (p->rchild==NULL) //右子树为空
           p->rchild=pn;
      else 
           InsertNode(p->rchild,pn);
    }
}

//二叉排序树的生成算法
struct node * CreateBinSortTree() 
{  
   int x;//用于暂时存放输入的数值
   struct node *t;//指向根节点的指针变量
   struct node *s;//指向新插入节点的指针变量
   t=NULL;//最初为空树
   printf("请输入结点的值(整数,用空格隔开),当输入-1时结束.\n");
   scanf("%d",&x);
   while(x!=-1)
    {  
    s=(struct node *)malloc(sizeof(struct node));
        s->data=x;
        s->lchild=s->rchild=NULL;
        if (t==NULL)
           t=s;
        else
            InsertNode(t,s);
        scanf("%d",&x);
     }
  return (t);
}

void main()
{
  struct node * root;//定义指向根节点的指针变量
  printf("创建二叉排序树:\n");
  root= CreateBinSortTree();//创建二叉排序树
  printf("遍历二叉排序树:\n");
  MiddleOrder(root);//遍历二叉排序树
  printf("\n");
}

转载于:https://www.cnblogs.com/emanlee/archive/2007/09/18/897715.html

2008秋-计算机软件基础-第三章- 二叉排序树相关推荐

  1. 2008秋-计算机软件基础-第四章习题参考答案 P131 ,习题6之一

    Author: Eman Lee  P131,第6题之一 参考答案 (1)       直接插入排序 初始状态 [53] [87  12  61  70  68  27  65  21  35 ] 第 ...

  2. 2008秋-计算机软件基础- 实验一 参考源程序

    ------------------------------------------------------------------ 实验一 参考源程序 // 线性表的顺序存储(顺序表) // Aut ...

  3. 大学计算机基础第五版第三章,大学计算机基础第三章习题答案

    <大学计算机基础第三章习题答案>由会员分享,可在线阅读,更多相关<大学计算机基础第三章习题答案(4页珍藏版)>请在人人文库网上搜索. 1.第三章 微型计算机硬件组成1.微型计算 ...

  4. 计算机基础课件第三章ppt,计算机应用基础第三章3.4.ppt

    文档介绍: 3.4 使用网络服务 本节主要学****内容: 掌握即时通信软件QQ的安装与使用; 2. 开通与使用博客或微博; 3. 使用常用的网络服务,如网上存储数据.网上求职或购物 村僧弄锄蔓很卒河 ...

  5. 计算机中的表示方法,计算机应用基础第三章计算机中信息的表示方法

    <计算机应用基础第三章计算机中信息的表示方法>由会员分享,可在线阅读,更多相关<计算机应用基础第三章计算机中信息的表示方法(17页珍藏版)>请在人人文库网上搜索. 1.第第三三 ...

  6. Pytho基础 第三章

    Python基础 第三章 函数 3.1 概念整理 3.1.1 def语句和参数: 在调用print()或 len()等函数时,会传入一些值放于括号中间,在此称为参数.也可以自行定义接收参数的函数. d ...

  7. python基础代码事例-python基础第三章

    第三章主要讲解Python的print语句的应用和赋值语句,代码块与缩进,条件语句,循环语句.这几种基础的语句 Python 条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者 ...

  8. Tableau基础-第三章(快速表计算)

    从头开始学Tableau-第三章(快速表计算) 第一章 第二章 数据源 这一章主要介绍一下快速表计算,在前面的2章中我们基础的了解了一下Tableau的函数,有时候并不希望每一个指标值都用函数去构造, ...

  9. 计算机应用基础第三章操作步骤,最新江西三校生计算机应用基础模拟操作题集锦(超实用!)...

    第二章 Windows XP 操作系统 ? [2011高考] 将计算机系统时间修改为2011年9月1日10:30.请写出操作步骤. 答:双击系统托盘中时间图标(或双击"控制面板"窗 ...

最新文章

  1. Linux command: ps -ef |grep java
  2. intellij idea 2018 license 可用无废话
  3. java向指定文件继续写内容_java 向指定文件写入内容(如文件存在,则先删除再创建;写入如目录不存在,则创建)...
  4. Error: GlobalConfigUtils setMetaData Fail
  5. UVALive 4794 Sharing Chocolate DP
  6. Shell:Ctrl+s暂停终端和Ctrl+q
  7. 使用存储过程创建datawindow
  8. 拓端tecdat|加速R语言代码的策略
  9. 搜题公众号对接题库教程
  10. Java实体类与数据库表映射关系
  11. Cplusplus实现的爱心代码,爱心里面有三个字李欣怡
  12. 如何使用虚拟机运行“小HomeKit”智汀家庭云
  13. ThinkPad E425 1198A19 在win7下安装Ubuntu双系统卡在安装界面的问题
  14. 什么是 Python ?聊一聊Python程序员找工作的六大技巧
  15. 测试18款听书APP,免费听喜马拉雅上付费音频的办法其实很多
  16. 图片内容管家 (把文字隐藏到图片里)
  17. 【杂题】cf1041fF. Ray in the tube
  18. 中标麒麟——初次体验,感觉流畅
  19. 全球与中国便携式彩色超声设备市场投资前景及发展趋势预测分析报告2022-2028年
  20. 怎么去阅读文献-转自小木虫

热门文章

  1. 60页论文综述深度学习优化方法,出自UIUC
  2. ICCV 2019 | 旷视研究院提出文字检测新方法:像素聚合网络PAN
  3. java的课程总结_Java课程总结
  4. 3D建模学什么?细分的话,有这么多方向
  5. 【项目实践】:KNN实现手写数字识别(附Python详细代码及注释)
  6. 从零开始编写深度学习库(一)SoftmaxWithLoss CPU编写
  7. ubuntu同时装有MXNet和Caffe框架
  8. FCN用卷积层代替FC层原因(转)
  9. mysql不对称复制数据_mysql UNION all 实现不对称数据统计
  10. android tcp socket框架_花了一个星期,我终于把RPC框架整明白了