数据结构编程笔记二十五:第九章 查找 二叉排序树(动态查找表)查找算法的实现

上次我们介绍了静态查找表查找算法的实现,这次介绍二叉排序树(动态查找表)查找算法的实现。

还是老规矩:

程序在码云上可以下载。
地址:https://git.oschina.net/601345138/DataStructureCLanguage.git

看二叉排序树之前需要先了解一下二叉树的基本概念以及算法的实现,需要的童鞋可以参考《数据结构编程笔记十四:第六章 树和二叉树 二叉树基本操作及四种遍历算法的实现》。在此不再赘述。

二叉排序树是一种特殊的二叉树,左孩子结点值总小于根结点,右孩子结点值总大于根结点。(又是递归定义!)

一起看看代码实现吧:

//>>>>>>>>>>>>>>>>>>>>>>>>引入头文件<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

#include <stdio.h>       //使用了标准库函数 
#include <stdlib.h>      //使用了动态内存分配函数

//>>>>>>>>>>>>>>>>>>>>>>自定义符号常量<<<<<<<<<<<<<<<<<<<<<<<<<<< 

#define OVERFLOW -2          //内存溢出错误常量
#define OK 1                 //表示操作正确的常量 
#define ERROR 0              //表示操作错误的常量
#define TRUE 1               //表示逻辑正确的常量 
#define FALSE 0              //表示逻辑错误的常量
#define EQ(a,b) ((a)==(b))   //相等 
#define LT(a,b) ((a)< (b))   //小与
#define LQ(a,b) ((a)<= (b))  //小与等于 

//>>>>>>>>>>>>>>>>>>>>>自定义数据类型<<<<<<<<<<<<<<<<<<<<<<<<<<<

typedef int  Status;      //状态标志 
typedef int  KeyType;     //关键字类型
typedef struct{

    //关键字 
    KeyType key;
}TElemType;   

//----------------二叉树的二叉链表存储表示-------------------- 
typedef struct BiNode{

    //数据域 
    TElemType  data;

    //左右孩子结点指针
    struct BiNode  *lchild, *rchild; 
}BiNode, *BiTree;

//-----------------------二叉排序树的主要操作---------------------------

//>>>>>>>>>>>>>>>>>>>>>  1.二叉排序树的构建  <<<<<<<<<<<<<<<<<<<<<<<<<<<

/*
    函数:CreateBST
    参数:BiTree &T 二叉排序树引用 
    返回值:状态码,操作成功返回OK 
    作用:根据用户输入创建一棵二叉排序树 
*/
Status CreateBST(BiTree &T){

    //二叉排序树插入结点函数声明
    Status InsertBST(BiTree &T, TElemType e);

    //二叉排序树顶点总数 
    int num;

    //保存输入的关键字 
    TElemType e;

    //确定树中的顶点总数 
    printf("您想创建一棵含有几个顶点的二叉排序树,请输入顶点数,并按回车确认:");
    scanf("%d", &num);

    //输入关键字 
    printf("请输入%d个整数作为关键字,中间用空格隔开,并按Enter确认\n", num);
    for(int i = 0; i < num; i++) {
        scanf("%d", &e.key);
        InsertBST(T, e);
    }//for

    //操作成功 
    printf("二叉排序树创建完成\n"); 
    return OK;
}//CreateBST


//>>>>>>>>>>>>>>>>>>>  2.二叉排序树的遍历  <<<<<<<<<<<<<<<<<<<<

/*
    函数:PrintElement
    参数:BiTree &T 二叉排序树引用 
    返回值:状态码,操作成功返回OK 
    作用:元素访问函数,输出关键字key
*/
Status PrintElement(KeyType key) {

    //以控制台打印key的方式访问关键字 
    printf(" %d ", key);

    //操作成功 
    return OK;
}//PrintElement 

/*
    函数:InOrderTraverse
    参数:BiTree T 二叉排序树T
          Status(* Visit)(KeyType) 元素访问函数 
   
  • 9
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值