1614010102曹妍数据结构实验报告4 - 百度文库 ر

ѧ

΢ѧԺ

ʵ

2017-2018һѧڣ

γƣ

ѧ ţ

ʵ ݽṹʵ ѧ 1614010102 ר ҵ 16-1 һʵĿģ

1. ˳ҷ

2. նֲҷBinSearch()

ʵݣ

1. ˳ҷԱвң 2.öֲҷԲұв 3.Ըв

ʵ豸

Code Blocks Ӳ

΢ͼ

ġʵ̼ #include using namespace std;

template struct BinTreeNode {

ElemType data;

BinTreeNode *leftChild; BinTreeNode *rightChild; BinTreeNode() {

leftChild=rightChild=NULL; }

BinTreeNode(ElemType &item, BinTreeNode *lChild, BinTreeNode *rChild) {

data=item;

leftChild=lChild; rightChild=rChild; } };

template class BinarySortTree {

protected:

BinTreeNode *root;

void DestroyHelp(BinTreeNode *&r); ///rΪ void PreOrderHelp(const BinTreeNode *r)const;/// void InOrderHelp(const BinTreeNode*r)const;/// void PostOrderHelp(const BinTreeNode*r)const;/// int HeightHelp(const BinTreeNode *r) const;///

int NodeCountHelp(const BinTreeNode*r)const;/// int leafCountHelp(const BinTreeNode*r)const;///Ҷ

BinTreeNode*SearchHelp(const KeyType &key,BinTreeNode *&f)const;///ҹؼΪkeyԪ

void DeleteHelp(BinTreeNode *&p);///ɾpָĽ public:

BinarySortTree();

BinTreeNode *GetRoot()const; ///ضĸ bool Empty() const;

bool GetElem(const BinTreeNode*cur, ElemType &e)const;///EؽڵԪֵ

void InOrder()const;/// void PreOrder()const;/// void PostOrder()const;///

int NodeCount()const;/// int Height()const;///߶

BinTreeNode *Search(const KeyType &key) const;///ҹؼΪkeyԪ

bool Insert(const ElemType &e); ///Ԫe

bool Delete(const KeyType &key); ///ɾؼΪeԪ };

template

BinarySortTree::BinarySortTree() {

root=NULL; }

template

void BinarySortTree::DestroyHelp(BinTreeNode *&r)/// {

if(r!=NULL) {

DestoryHelp(r->leftChild); DestoryHelp(r->rightChild);

delete r; r=NULL; } }

template

void BinarySortTree::DeleteHelp(BinTreeNode *&p)///ɾ {

BinTreeNode *tmpPtr,*tmpF;

if(p->leftChild==NULL && p->rightChild==NULL) {

delete p; p=NULL; }

else if(p->leftChild==NULL) {

tmpPtr=p;

p=p->rightChild; delete tmpPtr; } else {

tmpF=p;

tmpPtr=p->leftChild;

while(tmpPtr->rightChild!=NULL) {

tmpF=tmpPtr;

tmpPtr=tmpPtr->rightChild; }

p->data=tmpPtr->data;

if(tmpF->rightChild==tmpPtr) {

DeleteHelp(tmpF->rightChild); } else {

DeleteHelp(tmpF->leftChild); } } }

template

void BinarySortTree::PreOrderHelp(const BinTreeNode*r)const/// {

if(r!=NULL)