當前位置:首頁 » 編程語言 » c語言中統計二叉樹結點數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中統計二叉樹結點數

發布時間: 2022-07-18 08:28:02

1. c語言二叉樹的葉子結點數統計

int nodenum(bt *t);
{
int lnum=rnum=0;
if(t->lch != NULL) lnum=nodenum(t->lch);
if(t->rch != NULL) rnum=nodenum(t->lch);
if(t->lch == NULL && t->rch ==NULL) return 1;
return lnum+rnum;

}

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

代碼如下:

#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);

}

(2)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]

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

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

4. C語言一道數據結構演算法題,求大神解答,求二叉樹的結點數量!

#include<bits/stdc++.h>
usingnamespacestd;

intdeg[233],tot[3],n,m;

intmain(){
scanf("%d",&n);
for(inti=1;i<n;i++){
intt1,t2;
scanf("%d%d",&t1,&t2);
deg[t1]++;deg[t2]++;
}
for(inti=1;i<=n;i++)
tot[deg[i]]++;
printf("%d%d%d ",tot[0],tot[1],tot[2]);
}

5. C語言中統計二叉樹節點的數量。

void CreateBiTree(BiTree bt) //創建一個二叉樹
{
char ch;
printf("請輸入該二叉樹節點的字元,.表示結束:");
ch=getchar();
printf("\n");
if(ch=='.') bt=NULL;
else
{
bt=(BiTree)malloc(sizeof(BiTNode));
bt->data=ch;
CreateBiTree((bt->LChild));
CreateBiTree((bt->RChild));
}
這個函數裡面
ch = getchar();
後面應該加一個
temp = getchar();
是因為你按得回車同樣被當做一個符號被輸入進二叉樹

6. 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;
}

7. 求C語言統計一棵二叉樹節點總數的演算法(只要函數)

用遞歸啊,除了葉子節點以外,每個節點都有左子樹和右子樹,只要判斷子節點不為空就用遞歸調用函數統一子樹的節點數,例如
f(t)=f(l)+f(r)+1;
節點總數等於左子樹的節點數+右子樹的節點數+1

8. c語言中二叉樹個數計算方法

在計算機科學中,二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作「左子樹」(left
subtree)和「右子樹」(right
subtree)。二叉樹常被用作二叉查找樹和二叉堆或是二叉排序樹。
二叉樹的每個結點至多隻有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2的
i
-1次方個結點;深度為k的二叉樹至多有2^(k)
-1個結點;對任何一棵二叉樹t,如果其終端結點數(即葉子結點數)為n0,度為2的結點數為n2,則n0
=
n2
+
1。
樹是由一個或多個結點組成的有限集合,其中:
⒈必有一個特定的稱為根(root)的結點;二叉樹
⒉剩下的結點被分成n>=0個互不相交的集合t1、t2、......tn,而且,
這些集合的每一個又都是樹。樹t1、t2、......tn被稱作根的子樹(subtree)。
樹的遞歸定義如下:(1)至少有一個結點(稱為根)(2)其它是互不相交的子樹
1.樹的度——也即是寬度,簡單地說,就是結點的分支數。以組成該樹各結點中最大的度作為該樹的度,如上圖的樹,其度為2;樹中度為零的結點稱為葉結點或終端結點。樹中度不為零的結點稱為分枝結點或非終端結點。除根結點外的分枝結點統稱為內部結點。
2.樹的深度——組成該樹各結點的最大層次。
3.森林——指若干棵互不相交的樹的集合,如上圖,去掉根結點a,其原來的二棵子樹t1、t2、t3的集合{t1,t2,t3}就為森林;
4.有序樹——指樹中同層結點從左到右有次序排列,它們之間的次序不能互換,這樣的樹稱為有序樹,否則稱為無序樹。

9. 編寫遞歸演算法,統計二叉樹中度為1的節點數目C語言怎麼寫

int
Degree(BTree
*
t)
{
if(!t)
//根節點為空
return
0;
else
if
(t->lchild
==
NULL
&&
t->rchild
==
NULL)//只有根節點
return
0;
else
if
(t->lchild
!=
NULL
&&
t->rchild
==
NULL)//有左孩子沒有右孩子
return
1+
Degree(t->lchild);
else
if
(t->lchild
==
NULL
&&
t->rchild
!=
NULL)//有右孩子沒有左孩子
return
1
+
Degree(t->rchild);
else
if
(t->lchild
!=
NULL
&&
t->rchild
!=
NULL)//左右孩子都有
return
Degree(t->lchild)
+
Degree(t->rchild);
}
手打,希望對你有幫助!