数据结构和算法——二叉排序(查找)树及实现
来源:互联网 发布:仓库平面图绘图软件 编辑:程序博客网 时间:2024/05/17 05:13
1. 优先队列 大根堆 小根堆,先比较谁的优先级高
2.树,一般用递归来实现,也可以用循环和栈来实现。
可空;
如果非空,由根节点和若干个互不交叉的分支组成,每个分支也是树,称为子树
3.二叉树:
如果每个节点最多只有两个分支,就称为二叉树
每个节点都是两个分支的话就称为满二叉树;
相反是完全二叉树。
二叉查找树
约定:左小于根,右大于根或不小于根
2.树,一般用递归来实现,也可以用循环和栈来实现。
可空;
如果非空,由根节点和若干个互不交叉的分支组成,每个分支也是树,称为子树
3.二叉树:
如果每个节点最多只有两个分支,就称为二叉树
每个节点都是两个分支的话就称为满二叉树;
相反是完全二叉树。
二叉树的节点包括一个数据,两个指向左右两个子节点的指针
处理树的基本思路
二叉查找树
约定:左小于根,右大于根或不小于根
要插入的数比根节点小,所以只在左分支找,比根节点大就在右边找
删除一个结点
1 找到要删除的结点的指针t
2 将指针另存一份p
3 左右结点合并(左结点放到右结点的左下方)用insert函数可自动完成
4 将Pn指向合并后的子树
5 delete p
6 结点数n--
01tree.cpp
<span style="font-size:18px;">#include <iostream>using namespace std;#include <iomanip>typedef char T;class bst{struct Node{T data;Node* L;Node* R;Node(const T& d):data(d),L(),R(){}Node(const T& d,Node*l,Node*r):data(d),L(l),R(r){}};typedef Node* tree;Node* rp;int n;public:bst():rp(),n(){}void clear(){clear(rp);n=0;}~bst(){clear();}void insert(const T& d){insert(rp,new Node(d));++n;}tree& find(const T& d){return find(rp,d);}void travel()const{travel(rp);cout<<endl;}bool empty()const{return rp==NULL;}bool remove(const T& d){删除节点tree& t = find(d);if(t==NULL) return false;Node* p = t;if(t->L!=NULL) insert(t->R, t->L);t = t->R;delete p;--n;return true;}const T& root()const{if(!rp) throw"空";return rp->data;}int size()const{return n;}void update(const T& olddata,const T& newdata){if(remove(olddata)) insert(newdata);}void insert(tree& t, Node* p){//添加结点if(t==NULL) t = p;else if(p->data < t->data) insert(t->L,p);else insert(t->R,p);}tree& find(tree& t, const T& d){//返回以d为根的子树的根指针if(t==NULL) return t;//没找到else if(d==t->data) return t;//找到了else if(d<t->data)return find(t->L,d);else return find(t->R,d);}void travel(tree t)const{//遍历if(t!=NULL){travel(t->L);cout << t->data << ' ';travel(t->R);}}void clear(tree& t){if(t!=NULL){clear(t->L);clear(t->R);delete t; t=NULL;}}int high(tree t){if(t==NULL) return 0;int lh = high(t->L);int rh = high(t->R);return 1+(lh>rh?lh:rh);}</span><span style="font-size:18px;"> //树状打印 中间根结点 上边右结点 下面左结点</span><span style="font-size:18px;">void print(tree t, int space, char sign){if(t==NULL) return;print(t->R,space+3,'/');cout << setw(space+1) << sign << t->data << endl;print(t->L,space+3,'\\');}void print(){ print(rp,0,'*');cout<<"---------"<<endl; }};int main(){bst b;b.insert('k');b.insert('s');b.insert('f');b.insert('t');b.insert('a');b.insert('m');b.insert('x');b.insert('e');b.insert('w');b.insert('b');b.insert('u');b.insert('j');b.print();b.remove('k');b.remove('m');b.remove('j');b.remove('u');b.print();b.update('b','k');b.update('k','b');b.update('x','*');b.print();while(!b.empty()) b.remove(b.root());cout<<"size:"<<b.size()<<endl;b.print();}</span>
0 0
- 数据结构和算法——二叉排序(查找)树及实现
- 数据结构中查找和排序算法总结及源码实现
- Java数据结构和算法——二叉查找树
- 数据结构——排序查找算法实现
- 算法漫谈-查找和排序及数据结构
- 数据结构与算法分析(三) —— 二叉查找树的实现
- 图解数据结构(7)——二叉查找树及平衡二叉查找树
- 图解数据结构(7)——二叉查找树及平衡二叉查找树
- 数据结构(6)——二叉查找树及平衡二叉查找树
- 图解数据结构(7)——二叉查找树及平衡二叉查找树
- 图解数据结构(7)——二叉查找树及平衡二叉查找树
- 浅谈算法和数据结构: 二叉查找树
- 算法和数据结构: 二叉查找树
- 浅谈算法和数据结构(7):二叉查找树
- 数据结构和算法——算法 查找算法(二分查找法)实现
- 数据结构与算法JavaScript - 二叉树和二叉查找树
- 【数据结构和算法15】二叉树排序
- 数据结构和算法二叉树排序
- 读懂Spring核心系列4(XML文件配置)
- Python模块optparse
- Android PhoneStateListener
- linux 与 windows 编译 生成文件对比
- CodeForces-266A-Stones on the Table
- 数据结构和算法——二叉排序(查找)树及实现
- Struts2.3.16.1Hibernate4.3.4Spring4.0.2 整合
- NoSQL的三大基石(CAP、BASE和最终一致性)
- CALayer与UIView
- 解压缩版MySQL环境配置及入门
- 子分类账知识学习(汇总网上比较有用的资料)
- poj-1331
- hdu2090算菜价
- getchar putchar是宏还是函数?