C语言——二叉排序树
二叉排序树是一种实现动态查找的树表,又称二叉查找树。
二叉排序树的性质:
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语言——二叉排序树的更多相关文章
- 二叉排序树插入C语言版 递归步骤理解
//二叉排序树 插入 (纯C语言实现) BTNode * BSTInsert2(BTNode *bt,int key){ //为什么纯C语言实现中 if(bt==NULL){ //要写成 bt-> ...
- c语言编程之二叉排序树
二叉排序树,又称为二叉查找树.它是一颗空树,或者是具有下面的性质的二叉树: 1.若它的左子树不空,则左子树上所有节点的值均小于它的根结构的值: 2.若它的右子树不空,则右子树上所有节点的值均大于它的根 ...
- C语言实现二叉排序树
程序以'#'结尾的二叉排序树. /*(双重指针 BSTree *T)问:数据结构中 二叉树建立结点为什么用 双重指针?详细解释下双重指针 答:指针的指针.因为树的结点要用指针描述.如果只用指针,作形参 ...
- 二叉排序树思想及C语言实现
转自: http://blog.chinaunix.net/uid-22663647-id-1771796.html 1.二叉排序树的定义 二叉排序树(Binary Sort Tree)又称二叉查找( ...
- [数据结构 - 第6章] 树之二叉排序树(C语言实现)
一.什么是二叉排序树? 对于普通的顺序存储来说,插入.删除操作很简便,效率高:而这样的表由于无序造成查找的效率很低. 对于有序线性表来说(顺序存储的),查找可用折半.插值.斐波那契等查找算法实现,效率 ...
- 二叉查找树(二叉排序树)(C语言)
#include<stdio.h> #include "fatal.h" struct TreeNode; typedef struct TreeNode *Posit ...
- 伸展树(一)之 图文解析 和 C语言的实现
概要 本章介绍伸展树.它和"二叉查找树"和"AVL树"一样,都是特殊的二叉树.在了解了"二叉查找树"和"AVL树"之后, ...
- POJ 2418 各种二叉排序树
题意很明确,统计各个字符串所占总串数的百分比,暴力的话肯定超时,看了书上的题解后发现这题主要是用二叉排序树来做,下面附上n种树的代码. 简单的二叉排序树,不作任何优化(C语言版的): #include ...
- 七大查找算法(附C语言代码实现)
来自:Poll的笔记 - 博客园 链接:http://www.cnblogs.com/maybe2030/p/4715035.html 阅读目录 1.顺序查找 2.二分查找 3.插值查找 4.斐波那契 ...
随机推荐
- 安装配置python、beautifulsoup4、pip的心酸总结
1.python下载安装不纠结,但如果要加入到eclipse里面就要注意一下版本,版本不匹配会造成,要不python降级,要不eclipse升级的情况 2.在稍新版本的python立面就附带下载在了p ...
- Java将\替换成/
public static void main(String[] args) { String str="upload\\media\\201904\\i4Qjz8E40xGQovUq-2C ...
- 【性能测试】:loadrunner直压MYSQL数据库的脚本开发
有时性能测试,会涉及到直接压测数据库,测试数据库处理sql的水平,或者通过sql脚本向数据库写数据做铺地数据 这里贴上一个自己用的对数据库操作的脚本 一,首先要去下载一个LR压MYSQL的一个库文件, ...
- 思维题--code forces round# 551 div.2
思维题--code forces round# 551 div.2 题目 D. Serval and Rooted Tree time limit per test 2 seconds memory ...
- Java Web入门学习(二) Eclipse的配置
Java Web学习(二) Eclipse的配置 一.下载Eclipse 1.进入Eclipse官网,进行下载 上图,下载Eclipse IDE for JaveEE Developers 版本,然后 ...
- dubbo接口快速测试技巧
在分布式系统的开发中,用到了dubbo+zookeeper技术,最近遇到一个问题,产品上线后,我负责的模块出了问题,某个bean中某个字段的值一直为null,而这个bean是我调用注册在zookeep ...
- MapReduce原理——分而治之
一.MapReduce简介 二.MapReduce并行处理的基本过程 三.MapReduce实际处理流程 四.一个job的运行流程 一.MapReduce简介 MapReduce是一种并行可扩展计算模 ...
- js动画实现(一)
requestAnimationFrame是什么? 在浏览器动画程序中,我们通常使用一个定时器来循环每隔几毫秒移动目标物体一次,来让它动起来.如今有一个好消息,浏览器开发商们决定:“嗨,为什么我们不在 ...
- springboot-21-maven多环境打包
前几天项目需要用到分环境打包, 于是研究了下, 由于项目基于springboot的, 所以分两个情况进行说明: 1), springboot的多环境配置 2), maven-springboot的多环 ...
- InnoDB的行记录格式, Compact, Redundant, Compressed, Dynamic
InnoDB存储引擎和大多数数据库一样(如Oracle和Microsoft SQL Server数据库),记录是以行的形式存储的.这意味着页中保存着表中一行行的数据.到MySQL 5.1时,InnoD ...