编程算法 - 二叉搜索树(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题讲的是,判断一棵树是不是二叉搜索树. 题目中给的是标准 ...
随机推荐
- 就目前市面上的面试整理来说,最全的BAT大厂面试题整理在这
原标题:就目前市面上的面试整理来说,最全的BAT大厂面试题整理在这 又到了面试求职高峰期,最近有很多网友都在求大厂面试题.正好我之前电脑里面有这方面的整理,于是就发上来分享给大家. 这些题目是网友去百 ...
- POJ 3134 - Power Calculus (IDDFS)
题意:求仅仅用乘法和除法最快多少步能够求到x^n 思路:迭代加深搜索 //Accepted 164K 1094MS C++ 840B include<cstdio> #include< ...
- Spring5源码深度解析(一)之理解Configuration注解
代码地址:https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian 1.Spring体系结构 ...
- ORACLE表空间的备份与恢复策略
转自原文如何进行ORACLE表空间的备份与恢复? 1.切换服务器归档模式,如果已经是归档模式可跳过此步: %sqlplus /nolog (启动sqlplus) SQL> conn / as s ...
- 辛星笔记之高质量JavaScript代码书写要点
首先本文章是http://www.zhangxinxu.com/wordpress/?p=1173 的读书笔记,读者能够自己到鑫旭的空间去阅读原文.这里我对其进行了简化. 可维护的代码的一些要求: ( ...
- Ubuntu 16.04/16.10安装 KDE Plasma
KDE目前的最新版本是Plasma 5.7(2016-10).Ubuntu默认的桌面环境是Unity,下面记录怎么在Ubuntu 16.04/16.10上安装KDE. Ubuntu 16.04/16. ...
- SetForegroundWindow
SetForegroundWindow 函数功能:该函数将创建指定窗口的线程设置到前台,并且激活该窗口.键盘输入转向该窗口,并为用户改各种可视的记号.系统给创建前台窗口的线程分配的权限稍高于其他线程. ...
- 黑马day18 jquery高级特性&Ajax的load方法
介绍jquery中的load方法: (1).前面没有jquery.修饰,能够判断出他是一个普通的非全局函数(也就是说是一个局部函数):$.,$().,jquery.等修饰的就是全局函数.没有这些修饰的 ...
- [Angular] Creating an Observable Store with Rx
The API for the store is really simple: /* set(name: string, state: any); select<T>(name: stri ...
- cocos2d-x游戏开发 跑酷(九) 源代码下载及小结
这个东西零零碎碎写了一个礼拜吧. 事实上也没多少东西在里面.文章后附下载地址 博客地址:http://blog.csdn.net/dawn_moon 由于我没用过chipmunk,并且它是面向过程的东 ...