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

二叉樹的計數c語言

發布時間: 2022-06-05 15:19:39

Ⅰ 精通c語言的親們,關於二叉樹節點怎麼計算呢

建議你看看數據結構裡面的二叉樹幾大特有性質,上面有詳細的分析。

Ⅱ 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.有序樹——指樹中同層結點從左到右有次序排列,它們之間的次序不能互換,這樣的樹稱為有序樹,否則稱為無序樹。

Ⅲ 怎麼計算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
參考資料:葉子結點_網路

Ⅳ 求二叉樹每層節點的個數,用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;
}

Ⅳ C語言,用非遞歸的演算法(鏈棧)計算二叉樹的結點數。

#包括
使用命名空間std;
定義MAX 100

類二叉樹
{

char數據;
二叉樹* lchild;
二叉樹* rchild;
};的
二叉樹* creatree()/ /非遞歸創建一棵二叉樹
{ />字元CH;
詮釋前面= 1,後= 0; / /初始化隊列
B樹*根*,S * Q [MAX];
根= NULL;
cout <<「請'@'表示'空','#',」結束「,他的貢獻層:」<< endl;
CH = getchar函數();
而因素(ch! = '#')
{
= NULL,/ /讀取的第一個假設是空的節點_at_
(ch! =「_at_')
{
新的二叉樹;
- >數據= CH;
- > lchild = NULL;
- > rchild = NULL;
}
後端的團隊+ +; / /指針遞增
Q [後] =;
如果(後部== 1)
根= / /根
其他
{
(S && Q [前方])/ /當前節點的父節點是不是空的節點
(後部%2 == 0)
Q [前] - > lchild;
其他
Q [前] - > rchild =;
(背面%2 == 1)
前+ +;
} BR /> CH = getchar函數()/ /讀出下一個節點的值
}
返回根;
}
無效後序(B樹* BT)
二叉樹* p = BT,*棧[MAX] ;/ / p表示當前節點協議棧棧[]
INT標記用於存儲節點[MAX];
頂部= -1 ;

{
在while(p! = NULL)/ /第一個處理器節點的左子節點都留給孩子,反過來堆棧
{
>棧[+ +頂部] = P;
[頂] = 0;
P = P-> lchild;
}
(TOP> = 0)/ /所有留守兒童處理
{
(標記[頂])/ /如果當前節點的右子尚未被訪問
{
P =堆棧[頂]; /輸出的協議棧節點的頂部,但消失在堆棧中,因為要輸出他們的孩子的第一個節點
p = P-> rchild; / /右子節點的處理
標簽[頂] = 1; / /在被訪問的的堆棧存儲節點的右子榜首的位置,下一次你把它退棧直接輸出
}
其他
{
法院<數據/ /在棧的棧頂元素,輸出的節點,節點p指向NULL
}

}}而(( P = NULL)| |(> = 0));
}

廉政的main()
{
二叉樹BT;
BT = creatree();
法院<<'\ n'<<「後序」;
後序(BT);
法院<< endl;
系統(「暫停「);
返回0;
}

Ⅵ 二叉樹的基本操作 C語言版的

#include<stdio.h>
#include<malloc.h>
int count=0;
typedef struct BiTNode { // 結點結構
char data;
struct BiTNode *lchild, *rchild; // 左右孩子指針
} BiTNode, *BiTree;

void CreateBiTree(BiTree &T){
char ch;
scanf("%c",&ch);
if(ch=='#')T=NULL;
else{
if(!(T = (BiTNode * )malloc(sizeof(BiTNode)))) return;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}//CreatBiTree
int PreOrder(BiTree T)//先序遍歷二叉樹的遞歸演算法
{
if (!T) return 0;
printf("%c ",T->data); // 訪問結點
PreOrder(T->lchild); // 遍歷左子樹
PreOrder(T->rchild);// 遍歷右子樹
return 1;
}
int InOrder(BiTree T)//先序遍歷二叉樹的遞歸演算法
{
if (!T) return 0;

InOrder(T->lchild); // 遍歷左子樹
printf("%c ",T->data); // 訪問結點
InOrder(T->rchild);// 遍歷右子樹
return 1;
}
int PostOrder(BiTree T)//先序遍歷二叉樹的遞歸演算法
{
if (!T) return 0;

PostOrder(T->lchild); // 遍歷左子樹
PostOrder(T->rchild);// 遍歷右子樹
printf("%c ",T->data); // 訪問結點
return 1;
}
int CountLeaf (BiTree T){
//返回指針T所指二叉樹中所有葉子結點個數
if (!T ) return 0;//空樹
if (!T->lchild && !T->rchild) return 1;//只有樹根
int m;
int n;
m = CountLeaf( T->lchild);

n = CountLeaf( T->rchild);

return (m+n);

} // CountLeaf

void main(){
int a;
BiTree T;
CreateBiTree(T);
printf("先序遍歷:");
PreOrder(T);
printf("中序遍歷:");
InOrder(T);
printf("後序遍歷:");
PostOrder(T);
a=CountLeaf(T);
printf("葉子節點個數:");
printf("%d",a);
}

Ⅶ 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語言二叉樹的葉子結點數統計

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;

}