二叉树(2)
2015-09-25 17:52
351 查看
1.二叉 查找树( 有序二叉树)
特点:每个结点n的左子树的值小于n中的值,右子树的值大于n的值
实现方式:数组,链表
1,。定义为结构数组,结构体中的信息(信息字段,两个指针),指针字段存储数组单元下标
优点:灵活( 可以使用向量vector)
缺点:插入必须知道 子节点的位置,必须按顺序查找
删除后会留下空隙,解决方法1>标记未用单元。浪费
2> 移动位置,必须更新对该元素的引用
2.链表形式
利用类来完成,结点为类的实例,该类由一个信息成员和两个指针成员组成。树整体为另一个类,并将结点类的实例作为成员并操作。
结点类成员设置为public
通用二叉查找树的实现
#include <iostream>
#include <stack>
using namespace std;
#ifndef BINARY_SEARCH_TREE
#define BINARY_SEARCH_TREE
template <class T>
class Stack:public stack<T> {
};
template <class T>
class Queue:public queue<T>{
T queue(){
T tmp = front();
queue<T>::pop();
return tmp;
}
void enqueue(const T& e1){
push(e1);
}
};
template <class T>
class BSTNode {
public:
BSTNode (){
left = right = 0;
}
BSTNode(const T& e,BSTNode<T> *l = 0,*r=0){
e1 = e;left = l;right=r;
}
T e1;
BSTNode<T> *left,*right;
};
template <class T>
class BST{
public:
BST(){
root = 0;
}
BST(){
clear();
}
void clear(){
clear(root);
root=0;
}
bool isEmpty() const{
return root == 0;
}
void preorder (){
preorder(root);
}//前序遍历
void inorder(){
inorder(root);
}//中序遍历
void postorder(){
preorder(root);
}//后序遍历
T* search(const T& e1) const {
return search(root,e1);
}// 搜索
void breadthFirst();
protect:
BSTNode<T> *root;
void clear(BSTNode<T> *);
T* search (BSTNode<T> *,const T&) const;
void preorder(BSTNode<T> *);
void inorder(BSTNode<T> *);
void inder(BSTNode<T> *);
virtual void visit(BSTNode<T> *p);
};
#endif
特点:每个结点n的左子树的值小于n中的值,右子树的值大于n的值
实现方式:数组,链表
1,。定义为结构数组,结构体中的信息(信息字段,两个指针),指针字段存储数组单元下标
优点:灵活( 可以使用向量vector)
缺点:插入必须知道 子节点的位置,必须按顺序查找
删除后会留下空隙,解决方法1>标记未用单元。浪费
2> 移动位置,必须更新对该元素的引用
2.链表形式
利用类来完成,结点为类的实例,该类由一个信息成员和两个指针成员组成。树整体为另一个类,并将结点类的实例作为成员并操作。
结点类成员设置为public
通用二叉查找树的实现
#include <iostream>
#include <stack>
using namespace std;
#ifndef BINARY_SEARCH_TREE
#define BINARY_SEARCH_TREE
template <class T>
class Stack:public stack<T> {
};
template <class T>
class Queue:public queue<T>{
T queue(){
T tmp = front();
queue<T>::pop();
return tmp;
}
void enqueue(const T& e1){
push(e1);
}
};
template <class T>
class BSTNode {
public:
BSTNode (){
left = right = 0;
}
BSTNode(const T& e,BSTNode<T> *l = 0,*r=0){
e1 = e;left = l;right=r;
}
T e1;
BSTNode<T> *left,*right;
};
template <class T>
class BST{
public:
BST(){
root = 0;
}
BST(){
clear();
}
void clear(){
clear(root);
root=0;
}
bool isEmpty() const{
return root == 0;
}
void preorder (){
preorder(root);
}//前序遍历
void inorder(){
inorder(root);
}//中序遍历
void postorder(){
preorder(root);
}//后序遍历
T* search(const T& e1) const {
return search(root,e1);
}// 搜索
void breadthFirst();
protect:
BSTNode<T> *root;
void clear(BSTNode<T> *);
T* search (BSTNode<T> *,const T&) const;
void preorder(BSTNode<T> *);
void inorder(BSTNode<T> *);
void inder(BSTNode<T> *);
virtual void visit(BSTNode<T> *p);
};
#endif
相关文章推荐
- 控制文本框只输入正负浮点数
- 仿qq向左滑动列表
- eclipse提交项目到github
- ASP.NET 文件后缀名详解
- X.509证书_生成X.509协议的证书
- Oracle 11G 表空间
- JDK源码阅读之Object类
- IOS开发过程中与嵌入的网页数据交互
- window用Xmanager4.0的Xstart连接linux远程桌面
- 关于DataURI base64编码的原理及实现
- LRU和LFU的区别
- 类型转换求和
- Android之DiskLruCache(缓存工具)
- 动态代理以及反射小结
- LAMP组合的编译安装(httpd 2.4+mysql 5.5+php 5.4)
- 取消MyEclipse中的JS验证
- hpuoj 1689: MZY寻宝 【bfs】
- chrome浏览器插件开发经验(一)
- 工作心得之一
- 注解式控制器运行流程及处理器定义 第六章 注解式控制器详解