您的位置:首页 > 其它

二叉树(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: