作者:disappearedgod
时间:2014-4-24
前记
3. 二叉搜索树
3.1 介绍
3.2 定义
3.3 性质
3.4 实现
3.4.1 二叉树的实现
#include
#include
using namespace std;
#ifndef BINARY_SEARCH_TREE
#DEFINE BINARY_SEARCH_TREE
template
class Stack : public stack
{
public:
T pop(){
T tmp = top();
stack
::pop(); return tmp; } }; template
class Queue:public queue
{ public: T dequeue(){ T tmp =front(); queue
:: pop(); return tmp; } void enqueue(const T& el){ push(el); } }; template
class BSTNode{ public: BSTNode(){ left = right = 0; } BSTNode(const T& el, BSTNode *l=0,BSTNode *r = 0){ Key = el; left = l; right = r; } T key; BSTNode *left,*right; }; template
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(){ postorder(root); } T* search(const T& el)const{ return search(root,el); } void breadthFirst(); void iterativePreorder(); void iterativeInorder(); void iterativePostorder(); void MorrisInorder(); void insert(const T&); void deleteByMerging(BSTNode
*&); void findAndDeleteByMerging(const T&); void deleteByCopying(BSTNode
*&); void balance(*T,int,int); protected: BSTNode
* root; void clear(BSTNode
*); T* search(BSTNode
*, const T&)const; void preorder(BSTNode
*); void inorder(BSTNode
*); void postorder(BSTNode
*); virtual void visit(BSTNode
*p){ cout<< p->key <<' '; } } #endif
3.5 应用
{10,5,15,#,#,6,20} 不是二叉查找树。
3.6 评价