二叉查找树练习
来源:互联网 发布:淘宝详情页的制作教程 编辑:程序博客网 时间:2024/05/16 09:09
实现代码:
#include <vector>using namespace std;template<class T>class BinarySearchTree{private:struct BinaryNode{T data;BinaryNode *left;BinaryNode *right;BinaryNode(const T &thedata, BinaryNode *lt, BinaryNode *rt):data(thedata),left(lt),right(rt){}};public:BinarySearchTree(BinaryNode *t=NULL){root =t;}~BinarySearchTree(){makeEmpty(root);}bool find(const T &x);void insert(const T &x);void remove(const T &x);int height();private:BinaryNode *root;vector<BinaryNode*> vNode;void insert(const T &x, BinaryNode* &t);void remove(const T &x, BinaryNode* &t);bool find(const T &x, BinaryNode* &t);void makeEmpty(BinaryNode* &t);void tranverse(BinaryNode* &t);int height(BinaryNode* &t);};//递归求树高template<class T>int BinarySearchTree<T>::height(){return height(root);}template<class T>int BinarySearchTree<T>::height(BinaryNode* &t){if(NULL==t)return 0;elsereturn (height(t->left)+1)>(height(t->right)+1)?(height(t->left)+1):(height(t->right)+1);}template<class T>void BinarySearchTree<T>::tranverse(BinaryNode* &t){if(NULL==t)return;else{tranverse(t->left);vNode.push_back(t);tranverse(t->right);}}template<class T>void BinarySearchTree<T>::makeEmpty(BinaryNode* &t){tranverse(t);vector<BinaryNode*>::iterator itNode;for (itNode=vNode.begin();itNode!=vNode.end();itNode++){delete (*itNode);}vNode.clear();}template<class T>bool BinarySearchTree<T>::find(const T &x){return find(x,root);}template<class T>bool BinarySearchTree<T>::find(const T &x, BinaryNode* &t){if(NULL==t)return false;else if(x==t->data)return true;else if(x<t->data)return find(x,t->left);else if(x>t->data)return find(x,t->right);}template<class T>void BinarySearchTree<T>::insert(const T &x){insert(x,root);}template<class T>void BinarySearchTree<T>::insert(const T &x, BinaryNode* &t){if(NULL==t)t=new BinaryNode(x,NULL,NULL);else if(x<t->data)insert(x,t->left);else if(x>t->data)insert(x,t->right);}template<class T>void BinarySearchTree<T>::remove(const T &x){remove(x,root);}template<class T>void BinarySearchTree<T>::remove(const T &x, BinaryNode* &t){if(NULL==t)return;else if(x<t->data)remove(x,t->left);else if(x>t->data)remove(x,t->right);else if(t->left!=NULL && t->right!=NULL){BinaryNode *tmp=t->right;while (tmp->left!=NULL)tmp=tmp->left;t->data=tmp->data;remove(t->data,t->right);}else{BinaryNode *oldNode=t;t=(t->left!=NULL)?t->left:t->right;delete oldNode;}}
测试代码:
#include <iostream>#include <vector>#include "main.h"using namespace std;int main(){int a[]={10,8,6,21,87,56,4,0,11,3,22,7,5,34,1,2,9};BinarySearchTree<int> tree;for(int i=0;i<17;i++)tree.insert(a[i]);cout << endl;cout << tree.height() << endl;cout << tree.find(2) << endl;tree.remove(2);cout << tree.find(2) << endl;cout << tree.height() << endl;tree.remove(11);cout << tree.height() << endl;cout << tree.find(100) << endl;cout << tree.find(56) << endl;return 0;}
- 二叉查找树练习
- 二叉查找树练习代码
- Scala练习-二叉树查找
- 算法练习四 二叉查找树
- golang 写二叉查找树练习
- 算法练习__二叉查找树
- 编程练习——二叉查找树(BinarySearchTree)
- 算法练习之二叉查找树 C++实现
- 查找--二叉查找树
- 二叉树、二叉查找树
- 二叉树 & 二叉查找树
- 【查找结构】二叉查找树
- 查找之二叉树查找
- 查找之二叉树查找
- 查找:二叉查找树总结
- Python 二叉树练习
- 练习--链式二叉树
- 二叉树代码练习
- MMS 协议学习笔记
- httpClient4.1发送https报文请求,带证书,签名
- MyEclipse 8.5安装 svn 方法(给力)
- SVN常用命令
- chattr与lsattr
- 二叉查找树练习
- 计算机网络 数据传输方式
- 时钟和抽奖
- 设计hafuman 编码器与解码器 C++实现
- 让Firefox的密码框永远都可以自动完成(For Firefox 4&5)
- linux下查看系统资源和负载,以及性能监控
- MYSQL常用命令总结
- B树的原理与实现(C++)
- 彩信的读取