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

c語言樹葉結點怎麼寫

發布時間: 2022-10-02 20:15:13

c語言中怎樣用遞歸遍歷葉子節點,並列印出來

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

typedef struct node{
char data;
struct node *left,*right;
} node;

void fout(node *root)/*輸出葉結點*/
{
if (root)
{
if (!(root->left)&&!(root->right)) putchar(root->data);
fout(root->left);
fout(root->right);
}
}

node *ins(node *root,char ad)/*演示輔助函數,用於建立二樹*/
{

if (root==NULL)
{
root=malloc(sizeof(node));
root->data=ad;
root->left=root->right=NULL;
}
else if (ad<root->data) root->left=ins(root->left,ad);
else if (ad>=root->data) root->right=ins(root->right,ad);

return root;
}

void FREE(node *root)/*演示輔助函數,用於釋放空間*/
{
if (!(root->left)&&!(root->right)) free(root);
else
{
if (root->left) FREE(root->left);
if (root->right) FREE(root->right);
}
}
int main(void)
{

node *root=NULL;
char ch;
while ((ch=getchar())!='\n')/*輸入一個以回車結束的字元串,用於建立二叉樹*/
{
root=ins(root,ch);
}
fout(root);/*輸出葉結點*/
FREE(root);/*刪除二叉樹*/
return 0;
}

㈡ 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語言代碼怎麼寫

剛剛回答了一個類似的問題,以下代碼供參考:
#include "stdio.h"
#include "stdlib.h"
#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef char TElemType;
typedef int Status;
typedef struct BiTNode { // 結點結構
TElemType data;
struct BiTNode *lchild, *rchild;
// 左右孩子指針
} BiTNode, *BiTree;

//以下是建立二叉樹存儲結構,空節點輸入作為#結束標識
Status CreateBiTree(BiTree &T) {
//請將該演算法補充完整,參見第6章課件演算法或課本
char ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;

} // CreateBiTree
void Preorder(BiTree T)
{
if(T)
{
printf("%c",T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
}

void Inorder(BiTree T)
{ // 中序遍歷二叉樹
//請將該演算法補充完整,參見第6章課件演算法
if(T)
{
Inorder(T->lchild);
printf("%c",T->data);
Inorder(T->rchild);
}
}
void Postorder(BiTree T)
{ // 後序遍歷二叉樹
//請將該演算法補充完整,參見第6章課件演算法
if(T)
{
Postorder(T->lchild);
Postorder(T->rchild);
printf("%c",T->data);
}
}

//以下是求葉子結點數
void CountLeaf(BiTree T,int& count){
//請將該演算法補充完整,參見第6章課件演算法
if(T){
if((!T->lchild)&&(!T->rchild))
count++;
CountLeaf(T->lchild,count);
CountLeaf(T->rchild,count);
}
}

//以下是求二叉樹的深度
int Depth(BiTree T ){
//請將該演算法補充完整,參見第6章課件演算法
int depthval,depthLeft,depthRight;
if(!T) depthval=0;
else{
depthLeft = Depth(T->lchild);
depthRight = Depth(T->rchild);
if(depthLeft>depthRight)depthval = 1+depthLeft;
else depthval = 1+depthRight;
}
return depthval;
}

void main(){
BiTree T;
int s=0,d;
printf("\n creat of the bitree:\n");
CreateBiTree(T);
printf("\n output result of Preorder:\n");
Preorder(T);
CountLeaf(T,s);
d=Depth(T);
printf("\n leaves=%d\n",s);
printf("\n depth=%d\n",d);
}

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

㈤ 按先序遍歷輸出葉子結點的程序(可以用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;
}

㈥ 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語言畫一片樹葉(如果好在話給高分)

#include "math.h"
#include <graphics.h>
#include <stdlib.h>
#include <time.h>
void main(void)
{
int gdriver=DETECT,gmode ;
int ran_number ;
float a,b,c,d,e,f ;
float x,y,x_pre,y_pre ;
float disp_x,disp_y ;
initgraph(&gdriver,&gmode,"\\tc");
/* setfillstyle(SOLID_FILL,RED);*/
randomize();
setbkcolor(BLUE);
setcolor(14);
x=y=x_pre=y_pre=0 ;
ran_number=90 ;
while(kbhit()==0)
{
ran_number=random(100)+1 ;
if(ran_number==1)
{
a=0 ;
b=0 ;
c=0 ;
d=0.15 ;
e=0 ;
f=0 ;
}
else if(ran_number>1&&ran_number<=86)
{
a=0.87 ;
b=0.014 ;
c=-0.014 ;
d=0.87 ;
e=0 ;
f=1.6 ;
}
else if(ran_number>86&&ran_number<=93)
{
a=0.26 ;
b=0.472 ;
c=0.772 ;
d=0.34 ;
e=0 ;
f=1.6 ;
}
else
{
a=0.28 ;
b=0.867 ;
c=-0.478 ;
d=0.4 ;
e=0 ;
f=0.44 ;
}
x=a*x_pre*cos(b)-d*sin(c)*y_pre+e ;
y=c*x_pre*sin(b)+d*cos(c)*y_pre+f ;
x_pre=x ;
y_pre=y ;
disp_x=(x+5)*639/12 ;
disp_y=350-y*28 ;
putpixel((int)disp_x,(int)disp_y,GREEN);
}
getch();
getch();
closegraph();
}
十分買這個圖形很便宜了,呵呵!

㈧ 已知二叉樹的先序遍歷序列和中序遍歷序列,統計該二叉樹中葉子結點的個數 用C語言怎麼編寫急急急在考試

int LeafNodes(BiTree T)

{ if(T==NULL) return 0;

else if((T->lchild==NULL)&&(T->rchild==NULL)) return 1;

else

{ numl=LeafNodes (T->lchild);

numr=LeafNodes (T->rchild);

return numr+numl;

}

或者:

public int getNumberOfLeavesByQueue(BinaryTreeNode root){

int count = 0; //葉子節點總數

LinkQueue<BinaryTreeNode> queue = new LinkQueue<>();

if(root != null){

queue.enQueue(root);

}

while (!queue.isEmpty()) {

BinaryTreeNode temp = (BinaryTreeNode) queue.deQueue();

//葉子節點:左孩子節點和右孩子節點都為NULL的節點

if(temp.getLeft() == null && temp.getRight() == null){

count++;

}else{

if(temp.getLeft() != null){

queue.enQueue(temp.getLeft());

}

if(temp.getRight() != null){

queue.enQueue(temp.getRight());

(8)c語言樹葉結點怎麼寫擴展閱讀:

根據訪問結點操作發生位置命名:

① NLR:前序遍歷(Preorder Traversal 亦稱(先序遍歷))

——訪問根結點的操作發生在遍歷其左右子樹之前。

② LNR:中序遍歷(Inorder Traversal)

——訪問根結點的操作發生在遍歷其左右子樹之中(間)。

③ LRN:後序遍歷(Postorder Traversal)

——訪問根結點的操作發生在遍歷其左右子樹之後。

注意:

由於被訪問的結點必是某子樹的根,所以N(Node)、L(Left subtree)和R(Right subtree)又可解釋為根、根的左子樹和根的右子樹。NLR、LNR和LRN分別又稱為先根遍歷、中根遍歷和後根遍歷。

㈨ C語言 求二叉樹根節點到葉子節點的路徑

它的演算法思想應該是
1,以一指針指向該葉子結點並向上(父結點)找,把父節點入棧(方便輸出路徑)
2,把指針指向父節點,重復上面的過程,直到節點的父節點為空
3,依次出棧輸出信息,路徑就出來了
(註:此二叉樹的節點應包括父指針,左右指針,數據域)

就這么多吧! 要學習程序,就得自己嘗試寫,寫多了就會了

還有什麼不懂的可以給我留言 !!

㈩ C語言二樹葉子結點

這個畫一下就知道了。

第一層 度為2的一個
第二層 2個
總計五個度為2 的,那麼第三層就是2個度為2 的節點 另外兩個為葉子節點。
第四層,4個葉子節點。
總計6個。
這個是不存在度為1 的情況。
事實上,度為1的節點個數,不影響葉子節點個數的。