遞迴遍歷 二叉樹 求高度 和 節點數 和 葉子節點數
阿新 • • 發佈:2019-01-27
1,二叉樹的儲存結構:
typedef struct Node
{
char data;
struct Node *lchild,*rchild;
}Node,*BiTree;
2, 建立二叉樹:
BiTree CreateBitree(BiTree &T) { char ch; cin>>ch; if(ch=='#') T=NULL; else { T=(BiTree)malloc(sizeof(Node)); if(!T) exit(-2); T->data=ch; CreateBitree(T->lchild); CreateBitree(T->rchild); return T; } }
3, 求二叉樹的高度:
void high(BiTree T,int &height)
{
if(T==NULL) height=0; //注意點
else
{
int left_h;
high(T->lchild,left_h);
int right_h;
high(T->rchild,right_h);
height=max(left_h,right_h)+1;
}
}
4, 二叉樹的葉子節點數目:
void CountLeaf(BiTree T,int &num) { if(T!=NULL) { if(T->lchild==NULL&&T->rchild==NULL) num++; CountLeaf(T->lchild,num); CountLeaf(T->rchild,num); } }
5,二叉樹節點數:
int nodes(BiTree T)
{
if(T==NULL) return 0;
else if(T->lchild==NULL&&T->rchild==NULL)
return 1;
else
return nodes(T->lchild)+nodes(T->rchild)+1;
}
6, 主函式
void Free(BiTree &T) { if(T==NULL) return ; Free(T->lchild); Free(T->rchild); free(T); T=NULL; } int main() { BiTree T=NULL; CreateBitree(T); int height; int num=0; high(T,height); cout<<height<<endl; CountLeaf(T,num); cout<<num<<endl; Free(T); return 0; }
資料: ABC##DE#G##F### 5 3