二叉搜索树
来源:互联网 发布:武汉安天怎么样 知乎 编辑:程序博客网 时间:2024/05/17 08:24
二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树。 它或者是一棵空树;或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;
二叉树的操作:
1.查找:
例如查找7是否在上图的二叉树上;
首先和根结点8比较,比8小,所以往左节点走,走到的的节点的值为3,比3大,所以往右节点走,走到的节点的值为6,比6大,则继续向右节点走,发现走到的节点的值和需要查找的值,相同,则查找结束;
2.插入:
例如在上图的二叉树上插入9;
这个操作盒查找很相似;首先个根节点8比较,比8大,所以往右节点走,走到的节点的值为10,比10小,所以往左节点走,发现无左节点所以,在节点值为10的左节点插入9,即9为10的左节点;
3.删除:
需要根据下列情况分别进行处理:
(1)需要删除的节点没有左儿子,那么就把右儿子提上去;
(2)需要删除的节点的左儿子没有右儿子,那么就把左儿子提上去;
(3)以上两种情况都不满足的话,就把左儿子的子孙中最大的节点提到需要删除的节点上;
例如要在上图的二叉树删除3;
首先该节点有左儿子,所以直接把左儿子提上去即可;
4.二叉搜索树的实现:
//表示节点的结构体struct node{int val;node *lch,*ch;};//插入数值xnode *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);elsep->rch=insert(p->rch,x);return p;}}//查找数值xbool 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);elsereturn find(p->rch,x);}}}//删除数值xnode *remove(node *p,int x){if (p==NULL)return NULL;else{if (x<p->val)p->lch=remove(p-lrch,x);else{if (x>p->val)p->rch=remove(p->rch,x);else{//找到数值x所在的节点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;}}
1 1
- 【二叉搜索数】HDU3791二叉搜索树
- 二叉树--二叉搜索树
- 【二叉树】二叉搜索树
- 二叉树- 二叉搜索树
- 【搜索树】二叉搜索树
- 二叉搜索树BSTree
- 二叉搜索树
- 二叉搜索树
- 二叉搜索树
- 最优二叉搜索树
- 二叉搜索树
- 二叉搜索树
- HDOJ3791 二叉搜索树
- 二叉查找树搜索
- 二叉搜索树
- 二叉搜索树
- BST 二叉搜索树
- 二叉搜索树
- Lua 学习笔记(4) -- 模块与包
- UNION与UNION ALL 区别
- box2d+opencv+openframeworks
- 程序员生存定律--管理向左,技术向右
- hdu 1072 Nightmare
- 二叉搜索树
- Android中用Java代码模拟鼠标指针(可显示于整个系统界面之上)
- 【软件管理器的开放】视频学习小结:读取系统程序安装信息和 GridView九宫格显示程序安装信息
- windows程序设计之绘图基础之LineDraw问题解决
- 打开Eclipse时出现"Failed to create the Java Virtual Machine"怎么办?
- linux的内存管理机制
- jquery block ui 下载
- ArcGIS教程:ArcGIS实用制图技巧——如何制作“阴影”效果
- mysql saveorupdate 支持