當前位置:首頁 » 編程語言 » c語言輸出葉子結點個數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言輸出葉子結點個數

發布時間: 2023-06-16 19:20:51

Ⅰ 數據結構演算法設計——統計二叉樹葉子結點的個數,並輸出結果

代碼如下:

#include<stdio.h>

#include<stdlib.h>

typedef struct BiTNode

{

char data;

struct BiTNode *lchild,*rchild;

}BiTNode,*BiTree;

void CreatTree(BiTree &A)

{

char ch;

scanf("%c",&ch);

if(ch=='#')

{

A=NULL;

}

else

{

A=new BiTNode;

A->data=ch;

CreatTree(A->lchild);

CreatTree(A->rchild);

}

}

int NodeTree(BiTree A)

{

if(A==NULL)

return 0;

else if(A->lchild==NULL&&A->rchild==NULL)

return 1;

else

return NodeTree(A->lchild)+NodeTree(A->rchild);

}

int main()

{

BiTree A;

int b;

printf("先序法賦值(空用#表示):");

CreatTree(A);

b=NodeTree(A);

printf("共有%d個葉子節點 ",b);

}

(1)c語言輸出葉子結點個數擴展閱讀

二叉樹的性質

1、對於任意一棵二叉樹,如果其葉結點數為N0,而度數為2的結點總數為N2,則N0=N2+1;

2、有N個結點的完全二叉樹各結點如果用順序方式存儲,則結點之間有如下關系:

若I為結點編號則 如果I>1,則其父結點的編號為I/2;

如果2*I<=N,則其左孩子(即左子樹的根結點)的編號為2*I;若2*I>N,則無左孩子;

如果2*I+1<=N,則其右孩子的結點編號為2*I+1;若2*I+1>N,則無右孩子。

3、給定N個結點,能構成h(N)種不同的二叉樹。h(N)為卡特蘭數的第N項。h(n)=C(2*n,n)/(n+1)。

4、設有i個枝點,I為所有枝點的道路長度總和,J為葉的道路長度總和J=I+2i[2]

Ⅱ 求查找二叉樹子葉(結點)個數的C程序

正好我在做這個作業,我剛寫完的,調試過的
為了能在葉子節點返回,我們得多添加葉子節點,使所有的葉子節點都為NULL,他們的直為'?'.
運行該程序,輸入ABD??EG???CFH??I?J???+回車
輸出leavers=4,deep=5
#include <stdio.h>
#include <stdlib.h>
#define NULLKEY '?'
typedef struct btnode
{
char data;
struct btnode *lchild,*rchild;
}btnode,*bitree;
bitree preCreateBitree(bitree &root)
{
char ch;
scanf("%c",&ch);
if(ch==NULLKEY)
{
root=NULL;
return(root);
}
else
{
root=(bitree)malloc(sizeof(btnode));
root->data=ch;
preCreateBitree(root->lchild);
preCreateBitree(root->rchild);
return(root);
}
}

int searchLeaves(bitree root)
{
if(root==NULL)
return(0);
else
{
printf("%c",root->data); //計算葉子數同時,遍歷每個結點的值
if(root->lchild==NULL && root->rchild==NULL)
return(1);
else
return(searchLeaves(root->lchild)+searchLeaves(root->rchild));
}
}

int searchDeep(bitree root)
{
int lDeep=0,rDeep=0;

if(root==NULL)
return(0);
else
{
lDeep=searchDeep(root->lchild);
rDeep=searchDeep(root->rchild);
return(1+((lDeep>rDeep)?lDeep:rDeep));
}
}

void main()
{
int leaves,deep;
bitree root;
root=preCreateBitree(root);
leaves=searchLeaves(root);\\二叉樹的葉子數
deep=searchDeep(root);\\二叉樹的深度
printf("\nleaves=%d,deep=%d",leaves,deep);
}

Ⅲ c語言 統計二叉樹的葉節點個數,並輸出每個葉節點到根結點的路徑

int countTreeNode(TreeNode * root, Queue *queue)
{
if (root == NULL)
return 0;
queue->push(root);//入隊
if (root->left == NULL && root->right == NULL)
{
queue->print();//列印隊列中的元素
queue->pop();//出隊
return 1;
}
int count = countTreeNode(root->left, queue) + countTreeNode(root->right,queue);
queue->pop();//出隊
return count;
}

Ⅳ C語言求樹中的葉子結點數

有從上至下和從下至上兩種方式可以統計樹的節點數。
設葉子節點(度為0的節點)數為x:
從上至下時,度為n的節點有n個子節點,再加上根節點,總結點數量為1+4×1+3×2+2×3+1×4+0×n=21
從下至上時,節點數為度為0~4的所有節點數相加,總節點數量為1+2+3+4+n=10+n
所以有21=10+n,得n=11.

Ⅳ 怎麼計算C語言的二叉樹中的葉子節點數

結點的度是指,該結點的子樹的個數,在二叉樹中,不存在度大於2的結點。
計算公式:n0=n2+1
n0
是葉子節點的個數
n2
是度為2的結點的個數
n0=n2+1=5+1=6
故二叉樹有5個度為2的結點,則該二叉樹中的葉子結點數為6。
(5)c語言輸出葉子結點個數擴展閱讀
葉子結點是離散數學中的概念。一棵樹當中沒有子結點(即度為0)的結點稱為葉子結點,簡稱「葉子」。
葉子是指度為0的結點,又稱為終端結點。
葉子結點
就是度為0的結點
就是沒有子結點的結點。
n0:度為0的結點數,n1:度為1的結點
n2:度為2的結點數。
N是總結點
在二叉樹中:
n0=n2+1;
N=n0+n1+n2
參考資料:葉子結點_網路

Ⅵ 按先序遍歷輸出葉子結點的程序(可以用C++運行的C語言程序)

#include<stdlib.h>
#include<stdio.h>


typedefstructbitnode{
intdate;
structbitnode*lchild,*rchild;
}bitnode,*bitree;
intj=0;
//函數說明
bitree*createbitree(bitree*T);
intQtraversebitree(bitreeT);
intZtraversebitree(bitreeT);
intHtraversebitree(bitreeT);
intFtraversebitree(bitreeT);
/*******************主函數****************************/


main()
{
bitreeTree,*T;intk;
do
{
printf(" ╔-----------------------------------------------╗");//顯示一個簡易菜單
printf(" ┆先序創建----1先序遍歷------2┆");
printf(" ┆中序遍歷----3後序遍歷------4┆");
printf(" ┆葉子個數---5退出程序------6┆");
printf(" ╚-----------------------------------------------╝ ");
printf("請輸入所要進行的操作序號:");
scanf("%d",&k);//接受用戶的選擇
switch(k)//接受用戶的函數
{case1:printf("左右子樹為空時用0代替,用間隔符隔開: ");
T=createbitree(&Tree);
break;
case2:Qtraversebitree(*T);
break;
case3:Ztraversebitree(*T);
break;
case4:Htraversebitree(*T);
break;
case5:printf(" 葉子個數為:%d ",Ftraversebitree(*T));
break;
case6:break;
default:printf("錯誤選擇!請重選 ");break;
}
}while(k!=6); //直到i被賦值為6
return0;


}
/*******************創建二叉樹函數****************************/
bitree*createbitree(bitree*T)
{
charch;
scanf("%d",&ch);
if(ch==0)
(*T)=NULL;
else{
if(!((*T)=(bitnode*)malloc(sizeof(bitnode))))
exit(0);
(*T)->date=ch;//生成根節點
createbitree(&(*T)->lchild);
createbitree(&(*T)->rchild);
}
returnT;
}


/*******************先序遍歷函數****************************/
Qtraversebitree(bitreeT)
{
if(T){printf("%d",T->date);
if(Qtraversebitree(T->lchild))
if(Qtraversebitree(T->rchild))return1;
return0;
}
elsereturn1;
}
/*******************中序遍歷函數****************************/
Ztraversebitree(bitreeT)
{
if(T){if(Ztraversebitree(T->lchild))
printf("%d",T->date);
if(Ztraversebitree(T->rchild))return1;
return0;
}
elsereturn1;
}
/*******************後序遍歷函數****************************/
Htraversebitree(bitreeT)
{
if(T){if(Htraversebitree(T->lchild))
if(Htraversebitree(T->rchild))
printf("%d",T->date);return1;
return0;
}
elsereturn1;
}


/******************返回葉子節點個數函數*************/
Ftraversebitree(bitreeT)
{
if(T){if(!((T->lchild)||(T->rchild)))j++;
if(Ftraversebitree(T->lchild))
if(Ftraversebitree(T->rchild))returnj;
returnj;
}
elsereturnj;
}