二叉排序树是一种实现动态查找的树表,又称二叉查找树。

二叉排序树的性质:

1. 若它的左子树不为空,则左子树上所有节点的键值均小于它的根节点键值

2. 若它的右子树不为空,则右子树上所有节点的键值均大于它的根节点键值

3. 根的左右子树也分别为二叉排序树

#include <stdio.h>
#include "BinTree.h" // 二叉排序树的查找算法 /*
// 二叉链表的类型定义
typedef struct btnode
{
int key;
struct btnode *lchild, *rchild; // 指向左右孩子的指针
}*BinTree; // 三叉链表的类型定义
typedef struct ttnode
{
int data;
struct ttnode *lchild, *parent, *rchild;
}*TBinTree;
*/ /*
在根指针所指的二叉排序树上递归地查找键值等于key的节点。
若成功,则返回指向该节点的指针,否则返回空指针。
*/
BinTree SearchBST(BinTree bst, int key)
{
if(bst == NULL) return NULL;
else if(key == bst->key) return bst;
else if(key < bst->key) return SearchBST(bst->lchild, key);
else return SearchBST(bst->rchild, key);
}

二叉排序树插入节点

#include <stdio.h>
#include "BinTree.h" // 二叉排序树的查找算法 /*
// 二叉链表的类型定义
typedef struct btnode
{
int key;
struct btnode *lchild, *rchild; // 指向左右孩子的指针
}*BinTree, BSTNode;
*/ // 二叉排序树的节点插入方法
/*
在二叉排序树上进行插入的原则是:必须要保证插入一个新节点后,仍为一棵
二叉排序树。这个节点是查找不成功时查找路径上访问的最后一个节点的左孩子
或右孩子。
*/ /*
在根指针所指的二叉排序树上递归地查找键值等于key的节点。
若成功,则返回指向该节点的指针,否则返回空指针。
指针f为查找节点的双亲,初始值为NULL
*/
BinTree SearchBST(BinTree bst, int key, BSTNode *f)
{
if(bst == NULL) return NULL;
else if(key == bst->key) return bst;
else if(key < bst->key) return SearchBST(bst->lchild, key, bst);
else return SearchBST(bst->rchild, key, bst);
} // 若根指针bst所指的二叉排序树上无键值为key的节点,
// 则插入这个节点,并返回1,否则返回0.
int InsertBST(BinTree bst, int key)
{
BSTNode *p, *t, *f;
f = NULL;
t = SearchBST(bst, key, f); // 查找不成功时插入新节点
if(t==NULL)
{
p = malloc(sizeof(btnode));
p->key = key;
p->lchild = NULL;
p->rchild = NULL;
// 如果查找节点的双亲不存在,被插入节点为新的根节点
if(f == NULL) bst = p;
else if(key < f->key) f->lchild = p;
else f->rchild = p; return ;
}
else // 查找成功时不用插入
return ;
}

C语言——二叉排序树的更多相关文章

  1. 二叉排序树插入C语言版 递归步骤理解

    //二叉排序树 插入 (纯C语言实现) BTNode * BSTInsert2(BTNode *bt,int key){ //为什么纯C语言实现中 if(bt==NULL){ //要写成 bt-> ...

  2. c语言编程之二叉排序树

    二叉排序树,又称为二叉查找树.它是一颗空树,或者是具有下面的性质的二叉树: 1.若它的左子树不空,则左子树上所有节点的值均小于它的根结构的值: 2.若它的右子树不空,则右子树上所有节点的值均大于它的根 ...

  3. C语言实现二叉排序树

    程序以'#'结尾的二叉排序树. /*(双重指针 BSTree *T)问:数据结构中 二叉树建立结点为什么用 双重指针?详细解释下双重指针 答:指针的指针.因为树的结点要用指针描述.如果只用指针,作形参 ...

  4. 二叉排序树思想及C语言实现

    转自: http://blog.chinaunix.net/uid-22663647-id-1771796.html 1.二叉排序树的定义 二叉排序树(Binary Sort Tree)又称二叉查找( ...

  5. [数据结构 - 第6章] 树之二叉排序树(C语言实现)

    一.什么是二叉排序树? 对于普通的顺序存储来说,插入.删除操作很简便,效率高:而这样的表由于无序造成查找的效率很低. 对于有序线性表来说(顺序存储的),查找可用折半.插值.斐波那契等查找算法实现,效率 ...

  6. 二叉查找树(二叉排序树)(C语言)

    #include<stdio.h> #include "fatal.h" struct TreeNode; typedef struct TreeNode *Posit ...

  7. 伸展树(一)之 图文解析 和 C语言的实现

    概要 本章介绍伸展树.它和"二叉查找树"和"AVL树"一样,都是特殊的二叉树.在了解了"二叉查找树"和"AVL树"之后, ...

  8. POJ 2418 各种二叉排序树

    题意很明确,统计各个字符串所占总串数的百分比,暴力的话肯定超时,看了书上的题解后发现这题主要是用二叉排序树来做,下面附上n种树的代码. 简单的二叉排序树,不作任何优化(C语言版的): #include ...

  9. 七大查找算法(附C语言代码实现)

    来自:Poll的笔记 - 博客园 链接:http://www.cnblogs.com/maybe2030/p/4715035.html 阅读目录 1.顺序查找 2.二分查找 3.插值查找 4.斐波那契 ...

随机推荐

  1. 基础概念——何为GNU与GCC

    GNU:GNU 是一个自由软件操作系统.全称是GNU‘s Not Unix. GNU 是一款类似Unix的操作系统,它所采用的的典型内核是Linux. 该组合叫作GNU/Linux操作系统: GNU网 ...

  2. bzoj4998: 星球联盟(link-cut-tree)

    题面 bzoj 题解 bzoj2959: 长跑的弱化版 产生了环就并查集维护一下 Code #include<bits/stdc++.h> #define LL long long #de ...

  3. 升级vue-cli为 cli3 并创建项目

    一.升级npm install -g @vue/cli 二.创建项目 1.vue  create vue3-project 下面会提示让你配置下自己想要用到的功能,然后它会自动帮你安装,这个看自己需求 ...

  4. mysql只能本机访问

    众所周知的是,mysql默认是listen 0.0.0.0:3306. 大网站的数据库服务器一般都在内网没有外网ip,用默认配置比较省事.但是如果只有一台vps,lnmp全部署在同一vps 上,mys ...

  5. (转)CentOS 7 安装 Python3、pip3

    原文:https://ehlxr.me/2017/01/07/CentOS-7-%E5%AE%89%E8%A3%85-Python3%E3%80%81pip3/ CentOS 7 默认安装了 Pyth ...

  6. jQuery对象扩展方法(Extend)深度解析

    1.这几天在写自己的Js工具类库,所以在编写对象扩展方法,参考了jQuery的对象扩展方法,在编写该方法前,需要掌握js深拷贝和浅拷贝的相关知识,下面是jQuery3.2.1版本对象扩展方法的源码: ...

  7. logstash 启动报找不主类或无法加载 java

    logstash 启动报无法找到主类解决方案 Zparkle 关注 2018.03.08 22:04* 字数 2051 阅读 1评论 0喜欢 0 当logstash启动时,首先要注意正确配置java ...

  8. Java的接口(interface)属性和方法的类型

    接口的属性必须是public static final Type 接口的方法必须是public abstract Type 不管你是全写,或只写部分,系统都会自动按上面的要求不全 也就是说 接口中 所 ...

  9. Leetcode 337. House Robber III

    337. House Robber III Total Accepted: 18475 Total Submissions: 47725 Difficulty: Medium The thief ha ...

  10. Idea中找不到xml配置文件问题研究以及classpath设置(转载)

    问题: 在用Idea建立一个Java Application工程的时候,应用了Spring框架,可是Spring的xml配置文件找不到.检查表明不是代码的问题.费了我好长时间才解决.   出现问题,我 ...