二叉树的建立与遍历,叶子结点的数目以及树的深度的求法,采用递归求解
?þ?æÊ?µÄ??Á?Óë?éÀú,Ò?×Ó?áµãµÄÊýÄ?ÒÔ??Ê?µÄÉî?ȵÄÇó??,?ÉÓõÝ?éÇó?â.txtÎÒ??ÉÝÍûÊ?Ã?
??Ö?Ï?ÍûÄãÒÔºóµÄÅ?ÈËÒ??ö??ÈçÒ??ö??Õæ??ÄîÐ?Ê?ºò????ÌìÈȵÄÊ?ºòÎÒÒ??ÉÒÔÏñÄÐÈËÒ?Ñù?â
?ò×Ó??ÊÇÎÒ?öÈËÐ?µÄ??ºÜ?òµ?µÄ?ÇÂ?ÏÂÀ?ÁË??ºÇºÇºÇ??
ÎÒµÄ?Ù?È?Õ?ä:
9805.html
#include
using namespace std;
//??ÒåÊ?µÄ?á??
typedef struct _binTree
{
char data;
_binTree *lNode,*rNode;
}binTree;
//?????þ?æÊ?
void createT(binTree *&rootNode,binTree *tempNode)
{
if(rootNode==NULL)
{
rootNode=tempNode; return;
}
else
{
if(rootNode->data > tempNode->data)
{
createT(rootNode->lNode,tempNode);
}
else if(rootNode->data < tempNode->data)
{
createT(rootNode->rNode,tempNode);
}
}
}
//?òÓ?ÒÑ????µÄÊý
void printT(binTree *rootNode) {
if(rootNode==NULL)return ;
else
{
printT(rootNode->lNode);
cout<data<<" ";
printT(rootNode->rNode);
}
}
//ÏÈÐò?éÀú?þ?æÊ?
void preTraverse(binTree *rootNode)
{
if(rootNode==NULL)return ;
else
{
cout<data<<" ";
printT(rootNode->lNode);
printT(rootNode->rNode);
}
}
//ÖÐÐò?éÀú?þ?æÊ?
void midTraverse(binTree *rootNode)
{
if(rootNode==NULL)return ;
else
{
printT(rootNode->lNode);
cout<data<<" ";
printT(rootNode->rNode);
}
}
//ºóÐò?éÀú?þ?æÊ?
void lastTraverse(binTree *rootNode)
{
if(rootNode==NULL)return ;
else
{
printT(rootNode->lNode);
printT(rootNode->rNode);
cout<data<<" ";
}
}
//?ÆËã?áµãµÄ×Ü?öÊý
int nodeTotal(binTree *rootNode) {
if(rootNode==NULL)return 0;
else
{
return 1+nodeTotal(rootNode->lNode)+nodeTotal(rootNode->rNode);
}
}
//?ÆËã?þ?æÊ?µÄÉî?È
int treeDepth(binTree *rootNode) {
if(rootNode==NULL)return -1;
else
{
int lH=treeDepth(rootNode->lNode);
int rH=treeDepth(rootNode->rNode);
if(lH>rH)return lH+1;
return rH+1;
}
}
//?ÆËãÒ?×Ó?áµãµÄ?öÊý
int leafTotal(binTree *rootNode) {
if(rootNode==NULL)return 0;
else
{
if(rootNode->lNode==NULL && rootNode->rNode==NULL)return 1;
else
{
int lH=leafTotal(rootNode->lNode);
int rH=leafTotal(rootNode->rNode);
return rH+lH;
}
}
}
int main()
{
binTree *rootNode,*tNode;
rootNode=NULL; tNode=NULL;
char ch;
cout<<"??ÕÕÏÂÃæ?ø?öµÄË?Ðò?øÐÐÊäÈë?????þ?æÊ??º"<>ch;
while(ch!='0')
{
tNode=new binTree;
tNode->data=ch; tNode->lNode=NULL; tNode->rNode=NULL;
createT(rootNode,tNode);
cin>>ch;
}
if(rootNode==NULL)
{
cout<<"Tree is NULL."<
using namespace std;
//******************************************************************************
*******
//?þ?æÊ??áµãÀàµÄ??Òå
template
struct BTNode
{
T data;
BTNode * Lchild,*Rchild;
BTNode(T nodeValue = T(),BTNode* leftNode = NULL,BTNode* rightNode = NULL )
:data(nodeValue),Lchild(leftNode),Rchild(rightNode){}
//?ÉÑ?Ôñ?ÎÊýµÄÄ?ÈÏ??Ôìº?Êý };
//******************************************************************************
********
//?þ?æÊ?µÄ??Á?
template
void createBinTree(BTNode * &root )
{
BTNode* p = root;
BTNode* k;
T nodeValue ;
cin>>nodeValue;
if(nodeValue==-1)
{
root=NULL;
}
else
{
root=new BTNode();
root->data = nodeValue;
createBinTree(root->Lchild);
createBinTree(root->Rchild);
}
}
//******************************************************************************
******
//?þ?æÊ?µÄÏÈÐò?éÀú
template
void preOrder( BTNode * & p) {
if(p)
{
cout<data<<" ";
preOrder(p->Lchild);
preOrder(p->Rchild);
}
}
//******************************************************************************
********
//?þ?æÊ?µÄÖÐÐò?éÀú
template
void inOrder(BTNode * & p) {
if(p)
{
inOrder(p->Lchild);
cout<data<<" ";
inOrder(p->Rchild);
}
}
//******************************************************************************
********
//?þ?æÊ?µÄºóÐò?éÀú
template
void levelOrder(BTNode *& p) {
if(p)
{
levelOrder(p->Lchild);
levelOrder(p->Rchild);
cout<data<<" ";
}
}
//******************************************************************************
*******
//Í??Æ?þ?æÊ?ÖÐ?áµãµÄ?öÊý
template
int countNode(BTNode * & p) {
if(p == NULL) return 0;
return 1+countNode(p->Lchild)+countNode(p->Rchild);
}
//******************************************************************************
*****
//Çó?þ?æÊ?µÄÉî?È
template system("pause");
}
else
{
system("cls");
cout<<"\n\n\n\n\n\t?íÎóÑ?Ôñ??\n";
}
}
}
Èç 5
/ \
3 8
/ \ / \
2 4 6 9
/ \ / \ / \ / \
1 -1-1-1-17 -1 -1
/ \ / \
-1 -1 -1 -1
ÄÇÃ?ÊäÈëÊ?µÄÐòÁÐΪ:5321-1-1-14-1-186-17-1-19-1-1
#include //Ô??àÒëÃüÁî using namespace std;
struct TREE //?á??Ìå??Òå {
int data; //ÕûÐÍÊý struct TREE *L,*R; //TREE?á??Ö?Õë };
//??µ?Óú?Êýinsert?????áµã?åÈë?þ?æÊ?
void insert(TREE *&pRoot,TREE *pNode)
{
if(pRoot==NULL) //Èç?û?ù?áµãΪ?Õ {
pRoot=pNode; //???áµãpNode?åÈë?ù?áµã
return; //?µ?Ø
}
else //?ù?áµã??Ϊ?Õ {
//Èç?ûpNode?áµãÊý?ÝÐ?ÓÚµÈÓÚ?ù?áµãÊý?Ý
if(pNode->data<=pRoot->data)
insert(pRoot->L,pNode); //?åÈë×ó×ÓÊ?
else //Èç?ûpNode?áµãÊý?Ý?óÓÚ?ù?áµãÊý?Ý
insert(pRoot->R,pNode); //?åÈë×ó×ÓÊ?Ä? } //º?ÊýÌå?áÊø
}
//??µ?Óú?Êý??ÐÎ?ÎΪTREE?á??Ö?Õë??Êä?ö?þ?æÊ?ÄÚÈÝ void print(TREE *pRoot)
{ //º?ÊýÌå?ªÊ?
if(pRoot==NULL) //?ù?ò×ÓÊ??ù?áµãΪ?Õ
return; //?µ?Ø
print(pRoot->L); //Êä?ö×ó×ÓÊ?ÄÚÈÝ cout<data<R); //Êä?öÓÒ×ÓÊ?ÄÚÈÝ
} //??µ?Óú?Êý?áÊø int main() //Ö?º?Êý?ªÊ? { //º?ÊýÌå?ªÊ? struct TREE *pRoot,*pNode; //TREEÐÍ?á??Ö?Õë int temp; //ÁÙÊ??äÁ???ÓÃÓÚÓÃ??ÊäÈëÊý?Ý pRoot=NULL; //?õÊ????þ?æÊ??ù?áµãΪ?Õ pNode=NULL; //?õÊ????ý?åÈë?áµãµÄÖ?ÕëΪ?Õ cout<<"ÇëÊäÈëÒª?åÈë?áµãµÄÊý?Ý\n"; //ÌáÊ?ÐÅÏ?
cout<<"Èç?ûÊäÈë-1?íÊ??åÈë?ý?Ì?áÊø\n"; //ÌáÊ?ÐÅÏ?
cin>>temp; //ÊäÈë?ý?åÈë?áµãÊý?Ý
while(temp!=-1) //µ?ÐÍÑ,????-1Ϊ?áÊø?êÖ?
{ //Ñ,??Ìå?ªÊ?
//Ϊ?ý?åÈë?áµã?ÖÅäÄÚ?æµ?Ôª
pNode=new TREE;
pNode->data=temp; //????Öµ?ø?áµãµÄÊý?ÝÓò
pNode->L=NULL; //???áµãµÄ×óÓÒ
pNode->R=NULL; //Ö?ÕëÓòÖÃΪ?Õ
insert(pRoot,pNode); //??pNode?áµã?åÈëµ??ùΪpRooµÄ?ùÖÐ
cout<<"ÇëÊäÈë?ý?åÈë?áµãµÄÊý?Ý\n"; //ÌáÊ?ÐÅÏ?
cout<<"Èç?ûÊäÈë-1?íÊ??åÈë?ý?Ì?áÊø\n"; //ÌáÊ?ÐÅÏ?
cin>>temp; //ÊäÈë?ý?åÈë?áµãÊý?Ý
} //Ñ,??Ìå?áÊø
if(pRoot==NULL) //Èç?û?ù?áµãΪ?Õ
cout<<"ÕâÊÇÒ??Ã?ÕÊ???\n"; //Êä?ö?ÕÊ?ÐÅÏ?
else
print(pRoot); //µ?ÓÃinsertº?Êý??Êä?ö?þ?æÊ?ÄÚÈÝ
return 0;