天天看点

二叉搜索树(BST树)的简单实现

二叉搜索树(BST树)的简单实现

#include <stdlib.h>

二叉搜索树(BST树)的简单实现

template<typename T>

二叉搜索树(BST树)的简单实现

class CBinSTree;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

template <typename T>

二叉搜索树(BST树)的简单实现

class CTreeNode

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

{//树节点类

二叉搜索树(BST树)的简单实现

public:

二叉搜索树(BST树)的简单实现

    CTreeNode(const T& item,CTreeNode<T>* lptr = NULL,CTreeNode<T>* rptr = NULL):data(item),left(lptr),right(rptr)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

{

二叉搜索树(BST树)的简单实现

    }

二叉搜索树(BST树)的简单实现

    CTreeNode<T>* Left(void)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        return left;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    CTreeNode<T>* Right(void)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        return right;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    friend class CBinSTree<T>;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    T data;//数据

二叉搜索树(BST树)的简单实现

private:

二叉搜索树(BST树)的简单实现

    CTreeNode<T>* left;//左子树

二叉搜索树(BST树)的简单实现

    CTreeNode<T>* right;//右子树

二叉搜索树(BST树)的简单实现

};

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

class CBinSTree  

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

{//二叉搜索树类

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    CBinSTree();

二叉搜索树(BST树)的简单实现

    virtual ~CBinSTree();

二叉搜索树(BST树)的简单实现

    CBinSTree(const CBinSTree<T>& tree);

二叉搜索树(BST树)的简单实现

    CBinSTree<T>& operator = (const CBinSTree<T>& rhs);

二叉搜索树(BST树)的简单实现

    CTreeNode<T>* FindNode(const T& item,CTreeNode<T>* &parent)const;//寻找节点

二叉搜索树(BST树)的简单实现

    void PrintTree();//前序遍历树(非递归)

二叉搜索树(BST树)的简单实现

    void ClearTree();//清空树

二叉搜索树(BST树)的简单实现

    void Insert(const T& item);//插入数据

二叉搜索树(BST树)的简单实现

    void Delete(const T& item);//删除数据

二叉搜索树(BST树)的简单实现

    bool Contains(const T& item);//是否包含数据

二叉搜索树(BST树)的简单实现

    CTreeNode<T>* FindMin()const;//找最小值

二叉搜索树(BST树)的简单实现

    CTreeNode<T>* FindMax()const;//找最大值

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

protected:

二叉搜索树(BST树)的简单实现

    //辅助函数区

二叉搜索树(BST树)的简单实现

    CTreeNode<T>* GetTreeNode(const T& item,CTreeNode<T>* lptr=NULL,CTreeNode<T>* rptr=NULL);//分配树节点

二叉搜索树(BST树)的简单实现

    void FreeTreeNode(CTreeNode<T>* p);//释放树节点

二叉搜索树(BST树)的简单实现

    void DeleteTree(CTreeNode<T>* t);//删除树

二叉搜索树(BST树)的简单实现

    CTreeNode<T>* CopyTree(CTreeNode<T>* t);//拷贝树

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    CTreeNode<T> *root;//二叉搜索树树根

二叉搜索树(BST树)的简单实现

    int size;//树节点个数

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

#include "stdafx.h"

二叉搜索树(BST树)的简单实现

#include "BinSTree.h"

二叉搜索树(BST树)的简单实现

#include <iostream>

二叉搜索树(BST树)的简单实现

#include <stack>

二叉搜索树(BST树)的简单实现

using namespace std;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

/**///////////////////////////////////////////////////////////////////////

二叉搜索树(BST树)的简单实现

// Construction/Destruction

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

CBinSTree<T>::CBinSTree()

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    this->root = NULL;

二叉搜索树(BST树)的简单实现

    this->size = 0;

二叉搜索树(BST树)的简单实现

}

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

CBinSTree<T>::CBinSTree(const CBinSTree<T>& tree)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    root = this->CopyTree(tree.root);

二叉搜索树(BST树)的简单实现

    this->size = tree.size;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

CBinSTree<T>::~CBinSTree()

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    this->ClearTree();

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

CBinSTree<T>& CBinSTree<T>::operator = (const CBinSTree<T>& rhs)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    if(this==&rhs)

二叉搜索树(BST树)的简单实现

        return *this;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    root = this->CopyTree(rhs.root);

二叉搜索树(BST树)的简单实现

    size = rhs.size;

二叉搜索树(BST树)的简单实现

    return *this;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

CTreeNode<T>* CBinSTree<T>::GetTreeNode(const T& item,CTreeNode<T>* lptr,CTreeNode<T>* rptr)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    CTreeNode<T>* p;

二叉搜索树(BST树)的简单实现

    p = new CTreeNode<T>(item,lptr,rptr);

二叉搜索树(BST树)的简单实现

    if(p==NULL)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        cerr<<"分配内存失败!"<<endl;

二叉搜索树(BST树)的简单实现

        exit(1);

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    return p;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

CTreeNode<T>* CBinSTree<T>::FindMin()const

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    CTreeNode<T> *t = root;

二叉搜索树(BST树)的简单实现

    while(t->left!=NULL)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        t = t->left;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    return t;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

CTreeNode<T>* CBinSTree<T>::FindMax()const

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    while(t->right!=NULL)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        t = t->right;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

bool CBinSTree<T>::Contains(const T& item)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    CTreeNode<T> *p;

二叉搜索树(BST树)的简单实现

    return (this->FindNode(item,p)!=NULL);

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

CTreeNode<T>* CBinSTree<T>::CopyTree(CTreeNode<T>* t)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    CTreeNode<T> *newnode,*newlptr,*newrptr;

二叉搜索树(BST树)的简单实现

    if(t==NULL)

二叉搜索树(BST树)的简单实现

        return NULL;

二叉搜索树(BST树)的简单实现

    if(t->Left()!=NULL)

二叉搜索树(BST树)的简单实现

        newlptr = CopyTree(t->Left());

二叉搜索树(BST树)的简单实现

    else

二叉搜索树(BST树)的简单实现

        newlptr = NULL;

二叉搜索树(BST树)的简单实现

    if(t->Right()!=NULL)

二叉搜索树(BST树)的简单实现

        newrptr = CopyTree(t->Right());

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        newrptr = NULL;

二叉搜索树(BST树)的简单实现

    newnode = GetTreeNode(t->data,newlptr,newrptr);

二叉搜索树(BST树)的简单实现

    return newnode;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

void CBinSTree<T>::FreeTreeNode(CTreeNode<T>* p)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    delete p;

二叉搜索树(BST树)的简单实现

    p = NULL;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

void CBinSTree<T>::DeleteTree(CTreeNode<T>* t)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    if(t!=NULL)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        DeleteTree(t->Left());

二叉搜索树(BST树)的简单实现

        DeleteTree(t->Right());

二叉搜索树(BST树)的简单实现

        FreeTreeNode(t);

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

void CBinSTree<T>::ClearTree()

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    DeleteTree(root);

二叉搜索树(BST树)的简单实现

    root = NULL;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

CTreeNode<T>* CBinSTree<T>::FindNode(const T& item,CTreeNode<T>* &parent)const

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    parent = NULL;

二叉搜索树(BST树)的简单实现

    while(t!=NULL)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        if(item==t->data)

二叉搜索树(BST树)的简单实现

            break;

二叉搜索树(BST树)的简单实现

        else

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

            parent = t;

二叉搜索树(BST树)的简单实现

            if(item<t->data)

二叉搜索树(BST树)的简单实现

                t = t->Left();

二叉搜索树(BST树)的简单实现

            else 

二叉搜索树(BST树)的简单实现

                t = t->Right();

二叉搜索树(BST树)的简单实现

        }

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

void CBinSTree<T>::Insert(const T& item)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    CTreeNode<T>* t = root,*parent = NULL,*newnode;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        parent = t;

二叉搜索树(BST树)的简单实现

        if(item<t->data)

二叉搜索树(BST树)的简单实现

            t = t->Left();

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

            t = t->Right();

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    newnode = this->GetTreeNode(item);

二叉搜索树(BST树)的简单实现

    if(parent==NULL)

二叉搜索树(BST树)的简单实现

        root = newnode;

二叉搜索树(BST树)的简单实现

    else if(item<parent->data)

二叉搜索树(BST树)的简单实现

        parent->left = newnode;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        parent->right = newnode;

二叉搜索树(BST树)的简单实现

    size++;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

void CBinSTree<T>::Delete(const T& item)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    CTreeNode<T> *pDNode,*pRNode,*pParNode;

二叉搜索树(BST树)的简单实现

    if((pDNode = this->FindNode(item,pParNode))==NULL)

二叉搜索树(BST树)的简单实现

        return;

二叉搜索树(BST树)的简单实现

    if(pDNode->left==NULL)

二叉搜索树(BST树)的简单实现

        pRNode = pDNode->right;

二叉搜索树(BST树)的简单实现

    else if(pDNode->right==NULL)

二叉搜索树(BST树)的简单实现

        pRNode = pDNode->left;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        CTreeNode<T> *pParOfRNode = pDNode;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        while(pRNode->right!=NULL)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

            pParOfRNode = pRNode;

二叉搜索树(BST树)的简单实现

            pRNode = pRNode->right;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        if(pParOfRNode==pDNode)

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

            pRNode->right = pDNode->right;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

            pParOfRNode->right = pRNode->left;

二叉搜索树(BST树)的简单实现

            pRNode->left = pDNode->left;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    if(pParNode==NULL)

二叉搜索树(BST树)的简单实现

        root = pRNode;

二叉搜索树(BST树)的简单实现

    else if(pDNode->data<pParNode->data)

二叉搜索树(BST树)的简单实现

        pParNode->left = pRNode;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        pParNode->right = pRNode;

二叉搜索树(BST树)的简单实现

    this->FreeTreeNode(pDNode);

二叉搜索树(BST树)的简单实现

    this->size--;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

void CBinSTree<T>::PrintTree()

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    stack<CTreeNode<T>* > s;

二叉搜索树(BST树)的简单实现

    CTreeNode<T>* p = root;

二叉搜索树(BST树)的简单实现

    while (p!=NULL || !s.empty())

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        while (p!=NULL)             //遍历左子树

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

            cout<<p->data<<endl;

二叉搜索树(BST树)的简单实现

            s.push(p);

二叉搜索树(BST树)的简单实现

            p=p->Left();

二叉搜索树(BST树)的简单实现

        }//endwhile

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

        if (!s.empty())

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

            p=s.top();

二叉搜索树(BST树)的简单实现

            s.pop();

二叉搜索树(BST树)的简单实现

            p=p->Right();            //通过下一次循环实现右子树遍历

二叉搜索树(BST树)的简单实现

        }//endif   

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

// test.cpp : Defines the entry point for the console application.

二叉搜索树(BST树)的简单实现

//

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

#include "BinSTree.cpp"

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

CBinSTree<int>* MakeSampleTree()

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

{//示例BST树

二叉搜索树(BST树)的简单实现

    CBinSTree<int> *tree1 = new CBinSTree<int>();

二叉搜索树(BST树)的简单实现

    int a = 5;

二叉搜索树(BST树)的简单实现

    tree1->Insert(a);

二叉搜索树(BST树)的简单实现

    tree1->Insert(30);

二叉搜索树(BST树)的简单实现

    tree1->Insert(65);

二叉搜索树(BST树)的简单实现

    tree1->Insert(25);

二叉搜索树(BST树)的简单实现

    tree1->Insert(35);

二叉搜索树(BST树)的简单实现

    tree1->Insert(50);

二叉搜索树(BST树)的简单实现

    tree1->Insert(10);

二叉搜索树(BST树)的简单实现

    tree1->Insert(28);

二叉搜索树(BST树)的简单实现

    tree1->Insert(26);

二叉搜索树(BST树)的简单实现

    tree1->Insert(33);

二叉搜索树(BST树)的简单实现

    return tree1;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

int main(int argc, char* argv[])

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    CBinSTree<int> *tree1 = MakeSampleTree();

二叉搜索树(BST树)的简单实现

    tree1->PrintTree();

二叉搜索树(BST树)的简单实现

    std::cout<<"删除节点30:"<<endl;

二叉搜索树(BST树)的简单实现

    tree1->Delete(30);

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现

    cout<<tree1->Contains(40)<<endl;

二叉搜索树(BST树)的简单实现

    CTreeNode<int> *p = tree1->FindMin();

二叉搜索树(BST树)的简单实现

    cout<<p->data<<endl;

二叉搜索树(BST树)的简单实现

    return 0;

二叉搜索树(BST树)的简单实现
二叉搜索树(BST树)的简单实现