當前位置:首頁 » 存儲配置 » c二叉樹的順序存儲

c二叉樹的順序存儲

發布時間: 2024-12-05 12:18:40

㈠ 用c語言定義二叉樹的二叉鏈表存儲結構,完成二叉樹的建立,先序中序後序遍歷的操作,求所有葉子結點總數

#include<stdio.h>

#include<malloc.h>


typedef int ElemType;


typedef struct LNode{

ElemType data;

struct LNode *lchild,*rchild;

}LNode,*TLNode;


void create(TLNode * Tree){ //創建

ElemType e;

scanf("%d",&e);

if(e==0)

*Tree=NULL;

else{

(*Tree)=(TLNode)malloc(sizeof(LNode));

(*Tree)->data=e;

printf("input %d lchild: ",e);

create(&(*Tree)->lchild);

printf("input %d rchild: ",e);

create(&(*Tree)->rchild);

}

}


void print1(TLNode Tree){ //先序遍歷

if(Tree!=NULL){

printf("%d-",Tree->data);

print1(Tree->lchild);

print1(Tree->rchild);

}

}


void print2(TLNode Tree){ //中序遍歷

if(Tree!=NULL){

print2(Tree->lchild);

printf("%d-",Tree->data);

print2(Tree->rchild);

}

}

void print3(TLNode Tree){ //後序遍歷

if(Tree!=NULL){

print3(Tree->lchild);

print3(Tree->rchild);

printf("%d-",Tree->data);

}

}


int leaf=0; //求葉子節點數

int depth(TLNode Tree){ //深度

int s1,s2;

if(Tree==NULL)

return 0;

else{

s1=depth(Tree->lchild);

s2=depth(Tree->rchild);

if(s1==0 && s2==0) leaf++;

return (s1>s2?s1:s2)+1;

}

}


int Cnode(TLNode Tree){ //總結點

int s1,s2;

if(Tree==NULL)

return 0;

else{

s1=Cnode(Tree->lchild);

s2=Cnode(Tree->rchild);

return s1+s2+1;

}

}


void main(){

TLNode Tree;

printf("input 根節點: ");

create(&Tree);

printf("先序遍歷:");

print1(Tree);

printf("中序遍歷");

print2(Tree);

printf("後序遍歷");

print3(Tree);

printf(" 深 度:%d ",depth(Tree));

printf("總結點數:%d ",Cnode(Tree));

printf("葉子結點數:%d ",leaf);

}

㈡ 二叉樹是非線性數據結構,所以

二叉樹是非線性數據結構,所以(C、它能採用順序存儲結構和鏈式存儲結構存儲)。

一般而言,完全二叉樹(包括滿二叉樹)使用順序存儲,普通二叉樹一般用二叉鏈表或者三叉鏈表存儲。

二叉樹是n個有限元素的集合,該集合或者為空、或者由一個稱為根的元素及兩個不相交的、被分別稱為左子樹和右子樹的二叉樹組成,是有序樹。當集合為空時,稱該二叉樹為空二叉樹。在二叉樹中,一個元素也稱作一個結點。



(2)c二叉樹的順序存儲擴展閱讀:

若對一棵有n個節點的完全二叉樹進行順序編號(1≤i≤n),那麼,對於編號為i(i≥1)的節點:

當i=1時,該節點為根,它無雙親節點。

當i>1時,該節點的雙親節點的編號為i/2。

若2i≤n,則有編號為2i的左節點,否則沒有左節點 。

若2i+1≤n,則有編號為2i+1的右節點,否則沒有右節點。

㈢ 二叉樹的存儲結構是怎樣的有哪些類型的存儲結構對應的c語言描述是

樓上回答的是樹的存儲,不是二叉樹的存儲,主要如下:
1、順序存儲:適用於完全二叉樹,如果根從1開始編號,則第i結點的左孩子編號為2i,右孩子為2i+1,雙親編號為(i/2)下取整,空間緊密
2、二叉鏈表:適用於普通二叉樹,每個結點除了數據外,還有分別指向左右孩子結點的指針,存儲n個結點有n+1個空指針域,存儲密度小於順序存儲,但是適用范圍廣,缺陷是正常遍歷只能從雙親向孩子,退回來一般需要藉助棧(或者用遞歸,其實也是棧)
3、三叉鏈表:同樣適用於普通二叉樹,結點除了數據外,還有左右孩子與雙親的指針,存儲密度低於二叉鏈表,但是可以非常方便地在二叉樹中遍歷,不需要其他輔助工具

熱點內容
linux軟體測試 發布:2025-07-04 20:12:40 瀏覽:272
小數加減法計演算法則 發布:2025-07-04 20:11:49 瀏覽:689
文件如何定時上傳至伺服器 發布:2025-07-04 20:06:17 瀏覽:860
菜鳥商城源碼 發布:2025-07-04 20:01:31 瀏覽:445
英雄聯盟頭像文件夾 發布:2025-07-04 19:49:59 瀏覽:579
取消電腦連接wifi密碼怎麼設置密碼 發布:2025-07-04 19:31:32 瀏覽:507
電腦伺服器市場 發布:2025-07-04 19:14:06 瀏覽:503
沒簽名只加密 發布:2025-07-04 18:54:38 瀏覽:255
紅米手機存儲問題 發布:2025-07-04 18:50:43 瀏覽:844
水電煤演算法 發布:2025-07-04 18:36:44 瀏覽:330