编程算法 - 二叉搜索树(binary search tree) 代码(C)
二叉搜索树(binary search tree) 代码(C)
本文地址: http://blog.csdn.net/caroline_wendy
二叉搜索树(binary search tree)能够高效的进行插入, 查询, 删除某个元素, 时间复杂度O(logn).
简单的实现方法例如以下.
代码:
/*
* main.cpp
*
* Created on: 2014.7.20
* Author: spike
*/ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #include <queue>
#include <vector>
#include <functional> using namespace std; struct node {
int val;
node *lch, *rch;
}; class BinarySearchTree {
public:
node *insert(node *p, int x) {
if (p==NULL) {
node* q = new node;
q->val = x;
q->lch = q->rch = NULL;
return q;
} else {
if (x<p->val) p->lch = insert(p->lch, x);
else p->rch = insert(p->rch, x);
return p;
}
}
bool find(node *p, int x) {
if (p==NULL) return false;
else if (x==p->val) return true;
else if (x<p->val) return find(p->lch, x);
else return find(p->rch, x);
}
node *remove(node *p, int x) {
if (p==NULL) return NULL;
else if (x<p->val) p->lch = remove(p->lch, x);
else if (x>p->val) p->rch = remove(p->rch, x);
else if (p->lch == NULL) {
node* q=p->rch;
delete p;
return q;
} else if (p->lch->rch == NULL) {
node* q = p->lch;
q->rch = p->rch;
delete p;
return q;
} else {
node* q;
for (q = p->lch; q->rch->rch!=NULL; q=q->rch);
node* r = q->rch;
q->rch = r->lch;
r->lch = p->lch;
r->rch = p->rch;
delete p;
return r;
}
return p;
}
}; int main(void)
{
BinarySearchTree iBST;
node* root = NULL;
root = iBST.insert(root, 7);
root = iBST.insert(root, 2);
root = iBST.insert(root, 15);
root = iBST.insert(root, 1);
root = iBST.insert(root, 5);
root = iBST.insert(root, 10);
root = iBST.insert(root, 17);
root = iBST.insert(root, 4);
root = iBST.insert(root, 6);
root = iBST.insert(root, 8);
root = iBST.insert(root, 11);
root = iBST.insert(root, 16);
root = iBST.insert(root, 19); bool isOK = iBST.find(root, 15);
printf("result = %s\n", isOK? "Yes":"No");
iBST.remove(root,15);
isOK = iBST.find(root, 15);
printf("result = %s\n", isOK?"Yes":"No");
isOK = iBST.find(root, 10);
printf("result = %s\n", isOK?"Yes":"No"); return 0;
}
输出;
result = Yes
result = No
result = Yes
版权声明:本文博主原创文章,博客,未经同意不得转载。
编程算法 - 二叉搜索树(binary search tree) 代码(C)的更多相关文章
- [Data Structure] 二叉搜索树(Binary Search Tree) - 笔记
1. 二叉搜索树,可以用作字典,或者优先队列. 2. 根节点 root 是树结构里面唯一一个其父节点为空的节点. 3. 二叉树搜索树的属性: 假设 x 是二叉搜索树的一个节点.如果 y 是 x 左子树 ...
- 数据结构 《5》----二叉搜索树 ( Binary Search Tree )
二叉树的一个重要应用就是查找. 二叉搜索树 满足如下的性质: 左子树的关键字 < 节点的关键字 < 右子树的关键字 1. Find(x) 有了上述的性质后,我们就可以像二分查找那样查找给定 ...
- 二叉搜索树(Binary Search Tree)(Java实现)
@ 目录 1.二叉搜索树 1.1. 基本概念 1.2.树的节点(BinaryNode) 1.3.构造器和成员变量 1.3.公共方法(public method) 1.4.比较函数 1.5.contai ...
- 二叉搜索树(Binary Search Tree)实现及测试
转:http://blog.csdn.net/a19881029/article/details/24379339 实现代码: Node.java //节点类public class Node{ ...
- 编程算法 - 二叉搜索树 与 双向链表 代码(C++)
二叉搜索树 与 双向链表 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目:输入一颗二叉搜索树, 将该二叉搜索树转换成一个排序的双向链表. 要求 ...
- LeetCode算法题-Trim a Binary Search Tree(Java实现)
这是悦乐书的第284次更新,第301篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第152题(顺位题号是669).给定二叉搜索树以及L和R的最低和最高边界,修剪树以使其所 ...
- 算法二叉搜索树之AVL树
最近学习了二叉搜索树中的AVL树,特在此写一篇博客小结. 1.引言 对于二叉搜索树而言,其插入查找删除等性能直接和树的高度有关,因此我们发明了平衡二叉搜索树.在计算机科学中,AVL树是最先发明的自平衡 ...
- 二叉搜索树(BST)---python实现
github:代码实现 本文算法均使用python3实现 1. 二叉搜索树定义 二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree). 二叉搜 ...
- 一道二叉树题的n步优化——LeetCode98validate binary search tree(草稿)
树的题目,往往可以用到三种遍历.以及递归,因为其结构上天然地可以往深处递归,且判断条件也往往不复杂(左右子树都是空的). LeetCode 98题讲的是,判断一棵树是不是二叉搜索树. 题目中给的是标准 ...
随机推荐
- 洛谷—— P1017 进制转换
https://www.luogu.org/problem/show?pid=1017#sub 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1) ...
- (6)uboot具体解释——关闭缓存和mmu
uboot具体解释--关闭缓存和mmu 当设置完时钟分频以后,uboot就会运行cpu_init_crit汇编函数,这个函数的主要作用就是关闭缓存和mmu.然后调用lowlevel_init函数进行系 ...
- 【LCS】POJ1458Common Subsequence
题目链接:http://poj.org/problem?id=1458 这是一道最长公共子序列的模板题: #include<iostream> #include<string> ...
- 【47.76%】【Round #380B】Spotlights
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- HDU 1394 Minimum Inversion Number(线段树求最小逆序数对)
HDU 1394 Minimum Inversion Number(线段树求最小逆序数对) ACM 题目地址:HDU 1394 Minimum Inversion Number 题意: 给一个序列由 ...
- php实现 计算字符串的距离
php实现 计算字符串的距离 一.总结 一句话总结:解决dp问题最好的方法是什么:分析出状态后 实例+画表. 1.解决dp问题最好的方法是什么? 分析出状态后 实例+画表 2.画图的好处? 画出来表之 ...
- POJ 2387 Til the Cows Come Home (Dijkstra)
传送门:http://poj.org/problem?id=2387 题目大意: 给定无向图,要求输出从点n到点1的最短路径. 注意有重边,要取最小的. 水题..对于无向图,从1到n和n到1是一样的. ...
- php面试题6
php面试题6 一.总结 二.php面试题6 写出你认为语言中的高级函数:1)preg_replace()2)preg_match()3) ignore_user_abort()4) debug_ba ...
- 【C++竞赛 D】树的深度
时间限制:1s 内存限制:32MB 问题描述 数据结构中定义,树的高度为一棵树中所有节点的层次的最大值.现在yyy有一棵树请你帮他求出该树的高度. 输入描述 第一行一个整数T(1≤T≤20)表示数据组 ...
- PXC安装
安装软件依赖包yum install -y perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes socat nc openssl-devel l ...