Êý¾Ý½á¹¹¼¯ÖÐÉÏ»ú
ÊÔÑ鱨¸æ
ѧԺ£º ¼ÆËã»ú¿ÆѧÓë¼¼Êõ רҵ£º¼ÆËã»ú¿ÆѧÓë¼¼Êõ
ѧºÅ£º °à¼¶£º ÐÕÃû£º
2010/11/26
ÌâÄ¿£º¶þ²æÊ÷µÄ´´½¨Óë±éÀú
Ò»¡¢ÊµÑéÄ¿µÄ
1£®Ñ§»áʵÏÖ¶þ²æÊ÷½áµã½á¹¹ºÍ¶Ô¶þ²æÊ÷µÄ»ù±¾²Ù×÷¡£
2£®ÕÆÎÕ¶Ô¶þ²æÊ÷ÿÖÖ²Ù×÷µÄ¾ßÌåʵÏÖ£¬Ñ§»áÀûÓõݹéºÍ·ÇµÝ¹é·½·¨±àд¶Ô¶þ²æÊ÷ÕâÖֵݹéÊý¾Ý½á¹¹½øÐд¦ÀíµÄËã·¨¡£
¶þ¡¢ÊµÑéÒªÇó
1£®ÈÏÕæÔĶÁºÍÕÆÎպͱ¾ÊµÑéÏà¹ØµÄ½Ì²ÄÄÚÈÝ¡£
2£®±àдÍêÕû³ÌÐòÍê³ÉÏÂÃæµÄʵÑéÄÚÈݲ¢ÉÏ»úÔËÐС£
3£®ÕûÀí²¢ÉϽ»ÊµÑ鱨¸æ¡£
Èý¡¢ÊµÑéÄÚÈÝ
1£®±àд³ÌÐòÈÎÒâÊäÈë¶þ²æÊ÷µÄ½áµã¸öÊýºÍ½áµãÖµ£¬¹¹ÔìÒ»¿Ã¶þ²æÊ÷£¬²ÉÓÃÈýÖֵݹéºÍ·ÇµÝ¹é±éÀúËã·¨(Ç°Ðò¡¢ÖÐÐò¡¢ºóÐò)¶ÔÕâ¿Ã¶þ²æÊ÷½øÐбéÀú¡£
ËÄ¡¢ÊµÑé²½Öè
Ô´³ÌÐò´úÂë
#include
#include
using namespace std;
template
struct BinTreeNode //¶þ²æÊ÷½áµãÀඨÒå
{
T data; //Êý¾ÝÓò
BinTreeNode
BinTreeNode(T x=T(),BinTreeNode
:data(x),leftChild(l),rightChild(r){} //¿ÉÑ¡Ôñ²ÎÊýµÄĬÈϹ¹Ô캯Êý
};
//-------------------------------------------------------------------------
template
void PreOrder_2(BinTreeNode
{
stack
while(p!=NULL || !S.empty())
{
while(p!=NULL)
{
cout<
S.push(p);
p=p->leftChild; //±éÀúÖ¸Õë½øµ½×ó×ÓÅ®½áµã
}
if(!S.empty()) //Õ»²»¿ÕʱÍËÕ»
{
p=S.top();
S.pop();
p = p->rightChild; //±éÀúÖ¸Õë½øµ½ÓÒ×ÓÅ®½áµã
}
}
}
//----------------------------------------------------------------
template
void InOrder_2(BinTreeNode
{
stack
do
{
while(p!=NULL) //±éÀúÖ¸Õëδµ½×î×óϵĽáµã£¬²»¿Õ
{
S.push(p);
p=p->leftChild;
}
if(!S.empty()) //Õ»²»¿ÕʱÍËÕ»
{
p=S.top();
S.pop();
cout<
p=p->rightChild;
}
}
while(p !=NULL || !S.empty());
}
//------------------------------------------------------------------
template
void PostOrder_2(BinTreeNode
{
stack
stack
while(p != NULL || !S.empty()) //×ó×ÓÊ÷¾¹ý½áµã¼ÓL½øÕ»
{
while(p!=NULL)
{
S.push(p); //Ê×ÏȽ«tºÍtagΪ0ÈëÕ»£¬±éÀú×ó×ÓÊ÷
tag.push(0);//±éÀú×ó×ÓÊ÷Ç°µÄÏÖ³¡±£»¤
p=p->leftChild;
}
while( !S.empty() && tag.top()==1)
{
p=S.top();
S.pop();
tag.pop();
cout<
}
if( !S.empty())
{
tag.pop();
tag.push(1);//±éÀúÓÒ×ÓÊ÷Ç°µÄÏÖ³¡±£»¤,ÐÞ¸ÄÕ»¶¥tagΪ1£¬±éÀúÓÒ×ÓÊ÷
p=S.top(); // È¡Õ»¶¥±£´æµÄÖ¸Õë
p=p->rightChild;
}
else
break;
}
}
//--------------------------------------------------------------------
template
void InOrder_1(BinTreeNode
{//µÝ¹éº¯Êý£ºÖÐÐò´ÎÐò±éÀúÒÔsubTreeΪ¸ùµÄ×ÓÊ÷¡£
if(subTree !=NULL) //NULLÊǵݹéÖÕÖ¹Ìõ¼þ
{
InOrder_1(subTree->leftChild); //ÖÐÐò±éÀú¸ùµÄ×ó×ÓÊ÷
cout<
InOrder_1(subTree->rightChild); //ÖÐÐò±éÀú¸ùµÄÓÒ×ÓÊ÷
}
}
//--------------------------------------------------------------------------
template
void PreOrder_1(BinTreeNode
{//µÝ¹éº¯Êý£ºÇ°Ðò±éÀúÒÔsubTreeΪ¸ùµÄ¶þ²æÊ÷¡£
if(subTree !=NULL) //µÝ¹é½áÊøÌõ¼þ
{
cout<
PreOrder_1(subTree->leftChild); //Ç°Ðò±éÀú¸ùµÄ×ó×ÓÊ÷
PreOrder_1(subTree->rightChild); //Ç°Ðò±éÀú¸ùµÄÓÒ×ÓÊ÷
}
}
//---------------------------------------------------------------------------
template
void PostOrder_1(BinTreeNode
{//µÝ¹éº¯Êý£ººóÐò´ÎÐò±éÀúÒÔsubTreeΪ¸ùµÄ×ÓÊ÷¡£
if(subTree !=NULL) //NULLÊǵݹéÖÕÖ¹Ìõ¼þ
{
PostOrder_1(subTree->leftChild); //ºóÐò±éÀú¸ùµÄ×ó×ÓÊ÷
PostOrder_1(subTree->rightChild); //ºóÐò±éÀú¸ùµÄÓÒ×ÓÊ÷
cout<
}
}
//--------------------------------------------------------------------------
template
void CreateBinTree(BinTreeNode
{//µÝ¹é·½Ê½½¨Á¢¶þ²æÊ÷
T item;
cin>>item;
if(item !=-1)
{
subTree = new BinTreeNode
if(subTree == NULL)
{
cerr<<"´æ´¢·ÖÅä´í£¡"< exit(1); } subTree->data = item; CreateBinTree(subTree->leftChild); //µÝ¹é½¨Á¢×ó×ÓÊ÷ CreateBinTree(subTree->rightChild); //µÝ¹é½¨Á¢ÓÒ×ÓÊ÷ } else subTree = NULL; //·â±ÕÖ¸Ïò¿Õ×ÓÊ÷µÄÖ¸Õë } int main() { BinTreeNode cout<<"ÇëÊäÈëÿ¸ö½áµã£¬»Ø³µÈ·ÈÏ£¬²¢ÒÔ-1½áÊø£º"; CreateBinTree(Tree); cout<<"ÏÈÐò±éÀú¶þ²æÊ÷½á¹û£º"; PreOrder_1(Tree); cout< cout<<"ÖÐÐò±éÀú¶þ²æÊ÷½á¹û£º"; InOrder_1(Tree); cout< cout<<"ºóÐò±éÀú¶þ²æÊ÷½á¹û£º"; PostOrder_1(Tree); cout< cout<<"·ÇµÝ¹éÇ°Ðò±éÀú¶þ²æÊ÷½á¹û£º"; PreOrder_2(Tree); cout< cout<<"·ÇµÝ¹éÖÐÐò±éÀú¶þ²æÊ÷½á¹û£º"; InOrder_2(Tree); cout< cout<<"·ÇµÝ¹éºóÐò±éÀú¶þ²æÊ÷½á¹û£º"; PostOrder_2(Tree); cout< return 1; } Êý¾Ý½á¹¹ÊµÑ鱨¸æ ±¨¸æÌâÄ¿£º¶þ²æÊ÷µÄ»ù±¾²Ù×÷ ѧÉú°à¼¶£º ѧÉúÐÕÃû£ºÑ§ºÅ£º Ò»£®ÊµÑéÄ¿µÄ 1¡¢ »ù±¾ÒªÇó£ºÉî¿ÌÀí½â¶þ²æÊ÷ÐÔÖʺ͸÷ÖÖ´æ´¢½á¹¹µÄÌص㼰ÊÊÓ÷¶Î§£»ÕÆÎÕÓÃÖ¸ÕëÀàÐÍÃèÊö¡¢·ÃÎʺʹ¦Àí¶þ²æÊ÷µÄÔËË㣻ÊìÁ·ÕÆÎÕ¶þ²æÊ÷µÄ±éÀúËã·¨£»¡£ 2¡¢ ½Ï¸ßÒªÇó: ÔÚ±éÀúËã·¨µÄ»ù´¡ÉÏÉè¼Æ¶þ²æÊ÷¸ü¸´ÔÓ²Ù×÷Ëã·¨£»ÈÏʶ¹þ·òÂüÊ÷¡¢¹þ·òÂü±àÂëµÄ×÷ÓúÍÒâÒå;ÕÆÎÕÊ÷ÓëÉÁֵĴ洢Óë±ãÀû¡£ ¶þ. ʵÑéѧʱ£º ¿ÎÄÚʵÑéѧʱ£º3ѧʱ ¿ÎÍâʵÑéѧʱ£º6ѧʱ Èý£®ÊµÑéÌâÄ¿ 1£® ÒÔ¶þ²æÁ´±íΪ´æ´¢½á¹¹£¬ÊµÏÖ¶þ²æÊ÷µÄ´´½¨¡¢±éÀú£¨ÊµÑéÀàÐÍ£ºÑéÖ¤ÐÍ£© 1£©ÎÊÌâÃèÊö£ºÔÚÖ÷³ÌÐòÖÐÉè¼ÆÒ»¸ö¼òµ¥µÄ²Ëµ¥£¬·Ö±ðµ÷ÓÃÏàÓ¦µÄº¯Êý¹¦ÄÜ£º 1¡½¨Á¢Ê÷ 2¡Ç°Ðò±éÀúÊ÷ 3¡ÖÐÐò±éÀúÊ÷ 4¡ºóÐò±éÀúÊ÷ 5¡Çó¶þ²æÊ÷µÄ¸ß¶È 6¡Çó¶þ²æÊ÷µÄÒ¶×Ó½Úµã 7¡·ÇµÝ¹éÖÐÐò±éÀúÊ÷ 0¡½áÊø 2£©ÊµÑéÒªÇó£ºÔÚ³ÌÐòÖж¨ÒåÏÂÊöº¯Êý£¬²¢ÊµÏÖÒªÇóµÄº¯Êý¹¦ÄÜ£º CreateBinTree(BinTree &T): °´´Ó¼üÅÌÊäÈëµÄÇ°ÐòÐòÁУ¬´´½¨Ê÷ Preorder(BinTree &T)£ºÇ°Ðò±éÀúÊ÷£¨µÝ¹é£© Inorder(BinTree &T)£ºÖÐÐò(µÝ¹é)±éÀúÊ÷ Postorder(BinTree &T): ºóÐò±éÀúÊ÷£¨µÝ¹é£© PostTreeDepth(BinTree &T)£ºÊ÷µÄ¸ß¶È leaf(BinTree &T):Ê÷µÄÒ¶×Ó½Úµã InorderN(BinTree &T)£ºÖÐÐò(·ÇµÝ¹é)±éÀúÊ÷ 3)Êý¾Ý½á¹¹
µÚ¶þƪ£º¶þ²æÊ÷±éÀú ʵÑ鱨¸æ