1. 求查找二叉樹子葉(結點)個數的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);
}
2. 求二叉樹每一層的節點數 c語言實現多謝大神了!給思路也可以,
廣度搜索,每次掃到最後一個節點,往隊列里添加右子節點時,往隊列里加一個-1.每次遇到-1就統計完一層了。
3. 求二叉樹每層節點的個數,用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;
}
4. 怎麼用C語言寫求一棵二叉樹的葉子結點個數
只寫函數,root是根節點
int LeafCount(node root)
{
int i;
if(root)
{
i = !((root->lChild ? 1:0) | (root->rChild? 1:0));
return i + LeafCount(root->lChild) + LeafCount(root->rChild);
}
return 0;
}
5. c語言中二叉樹葉子結點怎麼求
遍歷啊,遍歷到這個節點沒有子節點,那就是葉子節點了
6. 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
這是定理哦
7. C語言 二叉樹求思路
不用建立二叉樹,因為輸入數據就已經是一個二叉樹了,所以只要遞歸求深度即可,
depth(c) = min{depth(lc), depth(rc)} + 1
求的時候用數組把depth(c)存下來,避免重復計算(這方法數據結構課上有教吧,動態規劃的一種變形)。
把每個depth(c)都算不出,然後求最大值即可(當然如果知道1是根節點,只要算depth(1))
8. 如何才能C語言編程實現求一棵二叉樹的結點總數急!!!
用遞歸啊,除了葉子節點以外,每個節點都有左子樹和右子樹,只要判斷子節點不為空就用遞歸調用函數統一子樹的節點數,例如
f(T)=f(L)+f(R)+1;
節點總數等於左子樹的節點數+右子樹的節點數+1
9. c語言遍歷二叉樹,怎麼求每個葉節點的高度
遍歷的時候帶一個變數表示高度,比如你用visit遍歷的話就在參數里寫個heigth變數,進入子節點的時候讓height+1,遇到葉子節點的時候height的值就是其高度
10. 怎麼計算C語言的二叉樹中的葉子節點數
結點的度是指,該結點的子樹的個數,在二叉樹中,不存在度大於2的結點。
計算公式:n0=n2+1
n0
是葉子節點的個數
n2
是度為2的結點的個數
n0=n2+1=5+1=6
故二叉樹有5個度為2的結點,則該二叉樹中的葉子結點數為6。
(10)c語言二叉樹求節點擴展閱讀
葉子結點是離散數學中的概念。一棵樹當中沒有子結點(即度為0)的結點稱為葉子結點,簡稱「葉子」。
葉子是指度為0的結點,又稱為終端結點。
葉子結點
就是度為0的結點
就是沒有子結點的結點。
n0:度為0的結點數,n1:度為1的結點
n2:度為2的結點數。
N是總結點
在二叉樹中:
n0=n2+1;
N=n0+n1+n2
參考資料:葉子結點_網路