Ⅰ 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語言二叉樹結點
二叉樹的重要性質:在任何二叉樹中,葉子結點數總比度為2的結點多1。
證明:設n0為二叉樹的葉結點數;n1為二叉樹中度為1的結點數;n2為二叉樹中度為2的結點數,顯然n=n0+n1+n2 (1)
由於二叉樹中除了根結點外,其餘每個結點都有且僅有一個前件。設 b為二叉樹的前件個數,n=b+1(2)
所有這些前件同時又為度為1和度為2的結點的後件。因此又有b=n1+2n2 (3)
我們將(3)代入(2)得出n=n1+2n2+1 (4)
比較(1)和(4),得出n0=n2+1,即葉子數比度為2的結點數多1
這是定理哦
Ⅲ C語言二叉樹的統計葉子節點問題
intPreOrder(BiTreeroot){
inti=0;
if(root==NULL)return0;
if(root->lchild==NULL&&root->rchild==NULL){
i++;
}
printf("%c",root->data);
intj=PreOrder(root->lchild);
intk=PreOrder(root->rchild);
returni+j+k;
}
Ⅳ 怎麼計算C語言的二叉樹中的葉子節點數
結點的度是指,該結點的子樹的個數,在二叉樹中,不存在度大於2的結點。
計算公式:n0=n2+1
n0
是葉子節點的個數
n2
是度為2的結點的個數
n0=n2+1=5+1=6
故二叉樹有5個度為2的結點,則該二叉樹中的葉子結點數為6。
(4)二叉樹結點數c語言擴展閱讀
葉子結點是離散數學中的概念。一棵樹當中沒有子結點(即度為0)的結點稱為葉子結點,簡稱「葉子」。
葉子是指度為0的結點,又稱為終端結點。
葉子結點
就是度為0的結點
就是沒有子結點的結點。
n0:度為0的結點數,n1:度為1的結點
n2:度為2的結點數。
N是總結點
在二叉樹中:
n0=n2+1;
N=n0+n1+n2
參考資料:葉子結點_網路
Ⅳ 編寫遞歸演算法,統計二叉樹中度為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);
}
手打,希望對你有幫助!
Ⅵ 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();
是因為你按得回車同樣被當做一個符號被輸入進二叉樹
Ⅶ 求C語言統計一棵二叉樹節點總數的演算法(只要函數)
用遞歸啊,除了葉子節點以外,每個節點都有左子樹和右子樹,只要判斷子節點不為空就用遞歸調用函數統一子樹的節點數,例如
f(t)=f(l)+f(r)+1;
節點總數等於左子樹的節點數+右子樹的節點數+1
Ⅷ C語言 二叉樹結點問題
應該是350。
解法,二叉樹就是一直一分為二,
那麼699個節點倒數第二排的節點個數為 256個
(計算方法: 512<699<1024 倒數第二排的節點個數為 512/2=256)
那麼最後一排的節點個數為 699-(256*2-1)= 188個
由於最後一排每兩個節點就是由倒數第二排的一個跟節點發展過來的,
所以倒數第二排的葉子節點為 256-(188/2)=162個
最後一排葉子節點的個數為 188個
總計葉子節點個數為 162+188 = 350個
Ⅸ 精通c語言的親們,關於二叉樹節點怎麼計算呢
建議你看看數據結構裡面的二叉樹幾大特有性質,上面有詳細的分析。
Ⅹ 求二叉樹每層節點的個數,用C語言實現
Status
HierarchyBiTree(BiTree
T,
Status
(*Visit)(TElemType
e))
{
LinkQueue
*Q;
//
保存當前節點的左右孩子的隊列
InitQueue(Q);
//
初始化隊列
if
(T
==
NULL)
return
ERROR;
//樹為空則返回
p
=
T;
//
臨時保存樹根T到指針p中
Visit(p->data);
//
訪問根節點
if
(p->lchild)
EnQueue(Q,
p->lchild);
//
若存在左孩子,左孩子進隊列
if
(p->rchild)
EnQueue(Q,
p->rchild);
//
若存在右孩子,右孩子進隊列
while
(!QueueEmpty(Q))
{
//
若隊列不空,則層序遍歷
DeQueue(Q,
p);
//
出隊列
Visit(p->data);
//
訪問當前節點
if
(p->lchild)
EnQueue(Q,
p->lchild);
//
若存在左孩子,左孩子進隊列
if
(p->rchild)
EnQueue(Q,
p->rchild);
//
若存在右孩子,右孩子進隊列
}
DestroyQueue(Q);
//
釋放隊列空間
return
OK;
}