#includestdlib.h
創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比滄源網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式滄源網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋滄源地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴(lài)。
typedef?struct?node/*二叉鏈表結(jié)構(gòu)聲明*/
{
struct?node?*lchild;
char?data;
struct?node?*rchild;
}bitnode,*bitree;/*bitnode、bitree為該結(jié)構(gòu)體類(lèi)型*/
bitree?CreatTree()/*創(chuàng)建二叉鏈表*/
{
char?a;
bitree?new;
scanf("%c",a);
if(a=='#')
return?NULL;
else
{
new=(bitree)malloc(sizeof(bitnode));
new-data=a;
new-lchild=CreatTree();/*遞歸創(chuàng)建左子樹(shù)*/
new-rchild=CreatTree();/*遞歸創(chuàng)建右子樹(shù)*/
}
return?new;
}
int?btreedepth(bitree?bt)/*自定義函數(shù)btreedepth()求二叉樹(shù)的深度*/
{
int?ldepth,rdepth;
if(bt==NULL)
return?0;
else
{
ldepth=btreedepth(bt-lchild);
rdepth=btreedepth(bt-rchild);
return?(ldepthrdepth?ldepth+1:rdepth+1);
}
}
int?ncount(bitree?bt)/*自定義函數(shù)ncount求結(jié)點(diǎn)的個(gè)數(shù)*/
{
if(bt==NULL)
return?0;
else?return(ncount(bt-lchild)+ncount(bt-rchild)+1);
}
int?lcount(bitree?bt)/*自定義函數(shù)lcount求葉子結(jié)點(diǎn)的個(gè)數(shù)*/
{
if(bt==NULL)
return?0;
else?if(bt-lchild==NULLbt-rchild==NULL)
return?1;
else?return(lcount(bt-lchild)+lcount(bt-rchild));
}
void?print(bitree?bt)/*自定義函數(shù)print用中序遍歷的方式輸出二叉樹(shù)結(jié)點(diǎn)內(nèi)容*/
{
if(bt!=NULL)
{
print(bt-lchild);
printf("%c",bt-data);
print(bt-rchild);
}
}
void?main()
{
bitree?root;
root=CreatTree();/*調(diào)用函數(shù)創(chuàng)建二叉鏈表*/
printf("contents?of?binary?tree:\n");
print(root);/*調(diào)用函數(shù)輸出結(jié)點(diǎn)內(nèi)容*/
printf("\ndepth?of?binary?tree:%d\n",btreedepth(root));/*調(diào)用函數(shù)輸出樹(shù)的深度*/
printf("the?number?of?the?nodes:%d\n",ncount(root));/*調(diào)用函數(shù)輸出樹(shù)中結(jié)點(diǎn)個(gè)數(shù)*/
printf("the?number?of?the?leaf?nodes:%d\n",lcount(root));/*調(diào)用函數(shù)輸出樹(shù)中葉子結(jié)點(diǎn)個(gè)數(shù)*/
}
我的能力也有限,學(xué)數(shù)據(jù)結(jié)構(gòu)過(guò)的時(shí)間有點(diǎn)久了,而且這個(gè)程序我讀的很吃力,沒(méi)用過(guò)這樣子的語(yǔ)言來(lái)寫(xiě)呢,剛剛寫(xiě)了個(gè)主類(lèi)可是運(yùn)行還是有錯(cuò)誤,我又不會(huì)改,不好意思。。。我想要的主類(lèi)大體是這樣寫(xiě)的,你可以參考一下:
void main()
{
BiTree Tr;//這里定義的東西在這個(gè)程序里也不行,本來(lái)是想讓那個(gè)BinTree是個(gè)指針的,可是這個(gè)程序俺也不大會(huì)弄
printf("按前序次序輸入,以#表示為空:\n");
CreateBinTree(Tr,T,i);//這個(gè)括號(hào)里面的內(nèi)容我也不知該怎么寫(xiě),程序大體讀了讀 貌似不大會(huì)
printf("\n前序遍歷結(jié)果為:\n");
PreOrder(Tr);//反正括號(hào)里的內(nèi)容就是你前面寫(xiě)的那個(gè)函數(shù)括號(hào)里相應(yīng)的
printf("\n中序遍歷結(jié)果為:\n");
InOrder(Tr);
printf("\n后序遍歷結(jié)果為:\n");
PostOder(Tr);
printf("\n層序遍歷結(jié)果為:\n");
LevelOrder(Tr);
printf("\n該二叉樹(shù)的深度為:\n%d",countHighOfBiTree(Tr));
printf("\n該二叉樹(shù)的葉子節(jié)點(diǎn)個(gè)數(shù)為:\n");
countNumOfLeaf(Tr);
printf("\n該二叉樹(shù)的所有結(jié)點(diǎn)數(shù)為:\n");
Count(Tr);
printf("\n");
}
這里是實(shí)驗(yàn)課上老師布置給我們的,然后自己寫(xiě)的,語(yǔ)言和你的不大一樣 但思路差不多,你可以看看這個(gè)的,畢竟我還是學(xué)的時(shí)候思路比較清晰啦,嘿嘿,貌似~是按前序序列來(lái)創(chuàng)建的二叉樹(shù),你輸入的前序序列一定要是正確的哦~我的這個(gè)程序還很低級(jí),錯(cuò)誤的它不會(huì)提示,不好意思哈,學(xué)習(xí)不大好,只能幫到這里了
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#includemalloc.h
#includestdlib.h
//#includestdio.h
#includestring.h
#define NULL 0
typedef char Elemtype;
typedef struct BinNode
{
Elemtype data;
struct BinNode *lchild,*rchild;//左右孩子指針
}BinTNode,*BinTree;
//按前序構(gòu)造二叉樹(shù)鏈表表示的二叉樹(shù)序列
BinTree CreateBinTree(BinTree T)
{
char ch;
scanf("%c,\n",ch);
if(ch=='#') T=NULL;
else
{
T=(BinNode *)malloc(sizeof(BinNode));
T-data=ch;//生成根結(jié)點(diǎn)
CreateBinTree(T-lchild);//生成左子樹(shù)
CreateBinTree(T-rchild);//生成右子樹(shù)
}//if
return T;
}//CreateBinTree
void Visit(char dataa)
{
printf("%c",dataa);
}
//前序遍歷二叉樹(shù)
void PreOrderTraverse(BinTree T)
{
//前序遍歷二叉樹(shù)T的遞歸算法,Visit是訪(fǎng)問(wèn)數(shù)據(jù)元素的函數(shù)
if(T)//二叉樹(shù)非空
{
Visit(T-data);//訪(fǎng)問(wèn)根結(jié)點(diǎn)
PreOrderTraverse(T-lchild);//前序遍歷左子樹(shù)
PreOrderTraverse(T-rchild);//前序遍歷右子樹(shù)
}//if
}//PreOrderTraverse
//中序遍歷二叉樹(shù)
void InOrderTraverse(BinTree T)
{
//中序遍歷二叉樹(shù)T的遞歸算法,Visit是訪(fǎng)問(wèn)數(shù)據(jù)元素的函數(shù)
if(T)//二叉樹(shù)非空
{
InOrderTraverse(T-lchild);//中序遍歷左子樹(shù)
Visit(T-data);//訪(fǎng)問(wèn)根結(jié)點(diǎn)
InOrderTraverse(T-rchild);//中序遍歷右子樹(shù)
}//if
}//InOrderTraverse
void PostOrderTraverse(BinTree T)
{
//后序遍歷二叉樹(shù)T的遞歸算法,visit是訪(fǎng)問(wèn)數(shù)據(jù)元素的函數(shù)
if(T)//二叉樹(shù)非空
{
PostOrderTraverse(T-lchild);//后序遍歷左子樹(shù)
PostOrderTraverse(T-rchild);//后序遍歷右子樹(shù)
Visit(T-data);//訪(fǎng)問(wèn)根結(jié)點(diǎn)
}//if
}//PostOrderTraverse
//求二叉樹(shù)的深度
int Depth(BinTree T)
{
int DepthLeft,DepthRight,depthval;
if(!T)
return 0;
else
{
DepthLeft=Depth(T-lchild);
DepthRight=Depth(T-rchild);
depthval=1+(DepthLeftDepthRight?DepthLeft:DepthRight);
return depthval;
}//if
}//Depth
void CountLeaf(BinTree T,int count0,int count2)
{
//統(tǒng)計(jì)二叉樹(shù)中的葉子節(jié)點(diǎn)個(gè)數(shù)
if(T)
{
if((!T-lchild)(!T-rchild))
count0++;
CountLeaf(T-lchild,count0,count2);
CountLeaf(T-rchild,count0,count2);
}
count2=count0-1;
}
void Countduone(BinTree T,int count1)
{
//統(tǒng)計(jì)二叉樹(shù)中度為1的結(jié)點(diǎn)個(gè)數(shù)
if(T)
{
if(((!T-lchild)(T-rchild))||((T-lchild)(!T-rchild)))
count1++;
Countduone(T-lchild,count1);
Countduone(T-rchild,count1);
}
}
int ZongNode(int a,int b,int c)
{
return (a+b+c);
}
void main()
{
BinTree Tr;
int count0,count1,count2;
int jie;
count0=0;
count1=0;
count2=0;
printf("按前序次序輸入,以#表示為空:\n");
CreateBinTree(Tr);
printf("\n前序遍歷結(jié)果為:\n");
PreOrderTraverse(Tr);
printf("\n中序遍歷結(jié)果為:\n");
InOrderTraverse(Tr);
printf("\n后序遍歷結(jié)果為:\n");
PostOrderTraverse(Tr);
printf("\n該二叉樹(shù)的深度為:\n%d",Depth(Tr));
printf("\n該二叉樹(shù)的葉子節(jié)點(diǎn)個(gè)數(shù)為:\n");
CountLeaf(Tr,count0,count2);
printf("%d",count0);
printf("\n該二叉樹(shù)的所有結(jié)點(diǎn)數(shù)為:\n");
//CountLeaf(Tr,count0,count2);
Countduone(Tr,count1);
jie=ZongNode(count1,count2,count0);
printf("%d",jie);
printf("\n");
}
#include iostream
using std::cin;
using std::cout;
using std::endl;
//using namespace std;
typedef struct BiTNode {
char data;
struct BiTNode *Lchild, *Rchild; // 左、右孩子指針
} *BiTree;
void CreateBiTree(BiTree T){
以B為根節(jié)點(diǎn)的左子樹(shù) A根節(jié)點(diǎn) 以C為根節(jié)點(diǎn)的右子樹(shù)
以D為根節(jié)點(diǎn)的左子樹(shù) B根節(jié)點(diǎn) 以E為根節(jié)點(diǎn)的右子樹(shù)
以G為根節(jié)點(diǎn)的左子樹(shù) D根節(jié)點(diǎn) 以H為根節(jié)點(diǎn)的右子樹(shù)
以K為根節(jié)點(diǎn)的左子樹(shù) C根節(jié)點(diǎn) 以F為根節(jié)點(diǎn)的右子樹(shù)
以I為根節(jié)點(diǎn)的左子樹(shù) F根節(jié)點(diǎn) 右子樹(shù)為空
左子樹(shù)為空 I根節(jié)點(diǎn) 以J為根節(jié)點(diǎn)的右子樹(shù)
擴(kuò)展資料:
主函數(shù)的兩個(gè)形參形式中的形參,允許從執(zhí)行環(huán)境中傳遞任意的多字節(jié)字符串(它們通常被稱(chēng)為命令行參數(shù)),各個(gè)指針 argv[1] .. argv[argc-1] 指向每個(gè)這些字符串的第一個(gè)字符。argv[0] 是指向一個(gè)表示用于執(zhí)行該程序自身的名字的空結(jié)尾多字節(jié)字符串(或者當(dāng)執(zhí)行環(huán)境不支持時(shí),為空字符串 "")的開(kāi)頭字符的指針。
這些字符串是可以改動(dòng)的,雖然對(duì)它們的改動(dòng)并不會(huì)被傳回給執(zhí)行環(huán)境:比如可以用 std::strtok 來(lái)使用它們。由 argv 所指向的數(shù)組的大小至少為 argc+1,其最后一個(gè)元素 argv[argc] 保證為一個(gè)空指針。
參考資料來(lái)源:百度百科-main函數(shù)