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)