二叉查找树(二叉排序树)(C语言)
#include<stdio.h>
#include "fatal.h"
struct TreeNode;
typedef struct TreeNode *Position;
typedef struct TreeNode *SearchTree;
typedef int ElementType;
SearchTree MakeEmpty(SearchTree T);
Position Find(ElementType X,SearchTree T);
Position FindMin(SearchTree T);
Position FindMax(SearchTree T);
SearchTree Insert(ElementType X,SearchTree T);
SearchTree Delete(ElementType X,SearchTree T);
ElementType Retrieve(Position P);
struct TreeNode
{
ElementType Element;
SearchTree left;
SearchTree right;
}; SearchTree MakeEmpty(SearchTree T)
{
if(T!=NULL)
{
MakeEmpty(T->left);
MakeEmpty(T->right);
free(T);
}
return NULL;
} Position Find(ElementType X,SearchTree T)
{
if(T==NULL)
return NULL;
if(X<T->Element)
return Find(X,T->left);
else if(X>T->Element)
return Find(X,T->right);
else
return T;
} Position FindMin(SearchTree T)
{
if(T==NULL)
return NULL;
if(T->left==NULL)
return T;
else
return FindMin(T->left);
} Position FindMax(SearchTree T)
{
if(T==NULL)
return NULL;
else if(T->right==NULL)
return T;
else
return FindMax(T->right);
} SearchTree Insert(ElementType X,SearchTree T)
{
if(T==NULL)
{
T=malloc(sizeof(struct TreeNode));
if(T==NULL)
FatalError("Out of space!!!");
else
{
T->Element=X;
T->left=T->right=NULL;
}
}
else if(X<T->Element)
T->left=Insert(X,T->left);
else if(X>T->Element)
T->right=Insert(X,T->right);
return T;
} SearchTree Delete(ElementType X,SearchTree T)
{
Position TmpCell;
if(T==NULL)
Error("Error not found");
else if(X<T->Element)
T->left=Delete(X,T->left);
else if(X>T->Element)
T->right=Delete(X,T->right);
else if(T->left&&T->right)
{
TmpCell=FindMin(T->right);
T->Element=TmpCell->Element;
T->right=Delete(X,T->right);
}
else
{
TmpCell=T;
if(T->left==NULL)
T=T->right;
else if(T->right=NULL)
T=T->left;
free(TmpCell);
}
return T;
}
ElementType Retrieve(Position P)
{
if(P==NULL)
return -;
else
return P->Element;
}
二叉查找树(二叉排序树)(C语言)的更多相关文章
- 二叉查找树(二叉排序树)的详细实现,以及随机平衡二叉查找树Treap的分析与应用
这是一篇两年前写的东西,自我感觉还是相当不错的Treap教程.正好期末信息科学技术概论课要求交一个论文,就把这个东西修改了一下交了,顺便也发到这里吧. 随机平衡二叉查找树Treap的分析与应用 1.序 ...
- 二叉查找树的C语言实现(二)
接着上次的话题.这次我们要讨论,二叉查找树的中序遍历和后序遍历(递归和非递归),另外还有先序遍历(非递归) 1.中序遍历(递归) static void __in_order(struct bnode ...
- 二叉查找树的C语言实现(一)
什么是二叉查找树? 二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具 ...
- 二叉查找树(一)之 图文解析 和 C语言的实现
概要 本章先对二叉树的相关理论知识进行介绍,然后给出C语言的详细实现.关于二叉树的学习,需要说明的是:它并不难,不仅不难,而且它非常简单.初次接触树的时候,我也觉得它似乎很难:而之所产生这种感觉主要是 ...
- 数据结构图文解析之:树的简介及二叉排序树C++模板实现.
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- AVL树(一)之 图文解析 和 C语言的实现
概要 本章介绍AVL树.和前面介绍"二叉查找树"的流程一样,本章先对AVL树的理论知识进行简单介绍,然后给出C语言的实现.本篇实现的二叉查找树是C语言版的,后面章节再分别给出C++ ...
- java工程师-面试知识点总结
目录(转载) [x] 一.Java基础(语言.集合框架.OOP.设计模式等) [x] 二.Java高级(JavaEE.框架.服务器.工具等) [x] 三.多线程和并发 [x] 四.Java虚拟机 [x ...
- Java研发工程师知识点总结
Java研发工程师知识点总结 最近一次更新2017年12月08日 大纲 一.Java基础(语言.集合框架.OOP.设计模式等) 二.Java高级(JavaEE.框架.服务器.工具等) 三.多线程和并发 ...
- Siki_Unity_3-13_编程内功修炼-算法
Unity 3-13 编程内功修炼 -- 算法 任务1&2:课程介绍 主要算法: 分治法 堆排序 二叉树 动态规划 贪心算法 图 任务3:分治算法 -- Divide and Conquer ...
随机推荐
- CSS知多少
1.Cascading Style Sheets 层叠样式表 2.层叠就是浏览器对多个样式来源进行叠加,最终确定结果的过程. 3. 样式的5大来源:浏览器默认样式.浏览器用户自定义样式.行内样式.内部 ...
- MySQL数据库(6)----配置文件 my.cnf 的使用
1. 使用源码安装好MySQL后,其配置文件一般位于 /usr/local/my.cnf,可以使用如下命令查看查看配置文件的搜索顺序: root@javis:~$ mysqld --help --ve ...
- Ubuntu 17.04 upgrade to 17.10
Just try sudo do-release-upgrade if you get this An upgrade from 'zesty' to 'bionic' is not support ...
- intelliJ IDEA 怎么添加本地的idea web项目
概述:这篇文章主要讲述idea开发工具怎么添加本地的idea web项目. 一:首先介绍一下idea web项目的目录结构: 上图详细简单的说了一下idea web项目的文件情况. 二:说明一下部署本 ...
- Android MediaPlayer 和 MediaCodec 的区别和联系(一)
目录: (1)概念解释 : 硬解.软解 (2)Intel关于Android MediaCodec的相关说明 正文: 一.硬解.软解 (1)概念: a.硬 ...
- Android N(API level 24.)废弃了Html.fromHtml(String)
从API level 24开始,fromHtml(String)被废弃,使用fromHtml(String source, int flags) 代替 flags: FROM_HTML_MODE_CO ...
- Fragment初探
Fragment允许将Activity拆分成多个完全独立封装的可重用的组件,每个组件有它自己的生命周期和UI布局.Fragment最大的优点是为不同屏幕大小创建灵活的UI.每个Fragment都是独立 ...
- 泛型< ? extends > <? super> 理解
public class Test { public static void main(String [] args){ Plate<? extends Fruit> p = new Pl ...
- ubuntu搭建LAMP全教程及简单使用
一:安装: 参考:http://jingyan.baidu.com/article/a681b0de36ad683b18434691.html 本经验向你展示如何在ubuntu14.04 环境下搭建a ...
- Kendo 计算字段
var Product = kendo.data.Model.define({ fields: { "quantity": { type: "number" } ...