二叉搜索树(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)的更多相关文章

  1. [Data Structure] 二叉搜索树(Binary Search Tree) - 笔记

    1. 二叉搜索树,可以用作字典,或者优先队列. 2. 根节点 root 是树结构里面唯一一个其父节点为空的节点. 3. 二叉树搜索树的属性: 假设 x 是二叉搜索树的一个节点.如果 y 是 x 左子树 ...

  2. 数据结构 《5》----二叉搜索树 ( Binary Search Tree )

    二叉树的一个重要应用就是查找. 二叉搜索树 满足如下的性质: 左子树的关键字 < 节点的关键字 < 右子树的关键字 1. Find(x) 有了上述的性质后,我们就可以像二分查找那样查找给定 ...

  3. 二叉搜索树(Binary Search Tree)(Java实现)

    @ 目录 1.二叉搜索树 1.1. 基本概念 1.2.树的节点(BinaryNode) 1.3.构造器和成员变量 1.3.公共方法(public method) 1.4.比较函数 1.5.contai ...

  4. 二叉搜索树(Binary Search Tree)实现及测试

    转:http://blog.csdn.net/a19881029/article/details/24379339 实现代码:  Node.java  //节点类public class Node{ ...

  5. 编程算法 - 二叉搜索树 与 双向链表 代码(C++)

    二叉搜索树 与 双向链表 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目:输入一颗二叉搜索树, 将该二叉搜索树转换成一个排序的双向链表. 要求 ...

  6. LeetCode算法题-Trim a Binary Search Tree(Java实现)

    这是悦乐书的第284次更新,第301篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第152题(顺位题号是669).给定二叉搜索树以及L和R的最低和最高边界,修剪树以使其所 ...

  7. 算法二叉搜索树之AVL树

    最近学习了二叉搜索树中的AVL树,特在此写一篇博客小结. 1.引言 对于二叉搜索树而言,其插入查找删除等性能直接和树的高度有关,因此我们发明了平衡二叉搜索树.在计算机科学中,AVL树是最先发明的自平衡 ...

  8. 二叉搜索树(BST)---python实现

    github:代码实现 本文算法均使用python3实现 1. 二叉搜索树定义   二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree).   二叉搜 ...

  9. 一道二叉树题的n步优化——LeetCode98validate binary search tree(草稿)

    树的题目,往往可以用到三种遍历.以及递归,因为其结构上天然地可以往深处递归,且判断条件也往往不复杂(左右子树都是空的). LeetCode 98题讲的是,判断一棵树是不是二叉搜索树. 题目中给的是标准 ...

随机推荐

  1. 就目前市面上的面试整理来说,最全的BAT大厂面试题整理在这

    原标题:就目前市面上的面试整理来说,最全的BAT大厂面试题整理在这 又到了面试求职高峰期,最近有很多网友都在求大厂面试题.正好我之前电脑里面有这方面的整理,于是就发上来分享给大家. 这些题目是网友去百 ...

  2. POJ 3134 - Power Calculus (IDDFS)

    题意:求仅仅用乘法和除法最快多少步能够求到x^n 思路:迭代加深搜索 //Accepted 164K 1094MS C++ 840B include<cstdio> #include< ...

  3. Spring5源码深度解析(一)之理解Configuration注解

    代码地址:https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian 1.Spring体系结构 ...

  4. ORACLE表空间的备份与恢复策略

    转自原文如何进行ORACLE表空间的备份与恢复? 1.切换服务器归档模式,如果已经是归档模式可跳过此步: %sqlplus /nolog (启动sqlplus) SQL> conn / as s ...

  5. 辛星笔记之高质量JavaScript代码书写要点

    首先本文章是http://www.zhangxinxu.com/wordpress/?p=1173 的读书笔记,读者能够自己到鑫旭的空间去阅读原文.这里我对其进行了简化. 可维护的代码的一些要求: ( ...

  6. 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. ...

  7. SetForegroundWindow

    SetForegroundWindow 函数功能:该函数将创建指定窗口的线程设置到前台,并且激活该窗口.键盘输入转向该窗口,并为用户改各种可视的记号.系统给创建前台窗口的线程分配的权限稍高于其他线程. ...

  8. 黑马day18 jquery高级特性&amp;Ajax的load方法

    介绍jquery中的load方法: (1).前面没有jquery.修饰,能够判断出他是一个普通的非全局函数(也就是说是一个局部函数):$.,$().,jquery.等修饰的就是全局函数.没有这些修饰的 ...

  9. [Angular] Creating an Observable Store with Rx

    The API for the store is really simple: /* set(name: string, state: any); select<T>(name: stri ...

  10. cocos2d-x游戏开发 跑酷(九) 源代码下载及小结

    这个东西零零碎碎写了一个礼拜吧. 事实上也没多少东西在里面.文章后附下载地址 博客地址:http://blog.csdn.net/dawn_moon 由于我没用过chipmunk,并且它是面向过程的东 ...