首页 二叉树的建立与遍历,叶子结点的数目以及树的深度的求法,采用递归求解

二叉树的建立与遍历,叶子结点的数目以及树的深度的求法,采用递归求解

举报
开通vip

二叉树的建立与遍历,叶子结点的数目以及树的深度的求法,采用递归求解二叉树的建立与遍历,叶子结点的数目以及树的深度的求法,采用递归求解 ?þ?æÊ?µÄ??Á?Óë?éÀú,Ò?×Ó?áµãµÄÊýÄ?ÒÔ??Ê?µÄÉî?ȵÄÇó??,?ÉÓõÝ?éÇó?â.txtÎÒ??ÉÝÍûÊ?Ã? ??Ö?Ï?ÍûÄãÒÔºóµÄÅ?ÈËÒ??ö??ÈçÒ??ö??Õæ??ÄîÐ?Ê?ºò????ÌìÈȵÄÊ?ºòÎÒÒ??ÉÒÔÏñÄÐÈËÒ?Ñù?â ?ò×Ó??ÊÇÎÒ?öÈËÐ?µÄ??ºÜ?òµ?µÄ?ÇÂ?ÏÂÀ?ÁË??ºÇºÇºÇ?? ÎÒµÄ?Ù?È?Õ?ä:...

二叉树的建立与遍历,叶子结点的数目以及树的深度的求法,采用递归求解
二叉树的建立与遍历,叶子结点的数目以及树的深度的求法,采用递归求解 ?þ?æÊ?µÄ??Á?Óë?éÀú,Ò?×Ó?áµãµÄÊýÄ?ÒÔ??Ê?µÄÉî?ȵÄÇó??,?ÉÓõÝ?éÇó?â.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;
本文档为【二叉树的建立与遍历,叶子结点的数目以及树的深度的求法,采用递归求解】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_215732
暂无简介~
格式:doc
大小:32KB
软件:Word
页数:13
分类:
上传时间:2018-03-15
浏览量:9