當前位置:首頁 » 存儲配置 » 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、三叉鏈表:同樣適用於普通二叉樹,結點除了數據外,還有左右孩子與雙親的指針,存儲密度低於二叉鏈表,但是可以非常方便地在二叉樹中遍歷,不需要其他輔助工具

熱點內容
java判斷資料庫是否存在 發布:2025-01-04 07:58:55 瀏覽:364
php高級培訓 發布:2025-01-04 07:48:58 瀏覽:906
ubuntu源碼包 發布:2025-01-04 07:40:54 瀏覽:285
java實現注冊 發布:2025-01-04 07:39:48 瀏覽:864
js壓縮視頻 發布:2025-01-04 07:39:47 瀏覽:738
光遇安卓為什麼不更新純凈錄屏 發布:2025-01-04 07:27:43 瀏覽:463
為什麼安卓手機不出面容識別 發布:2025-01-04 07:27:42 瀏覽:710
汽車用壓縮天然氣鋼瓶 發布:2025-01-04 07:17:57 瀏覽:725
rms伺服器搭建 發布:2025-01-04 07:16:26 瀏覽:466
我的世界租伺服器需要錢嗎 發布:2025-01-04 07:14:08 瀏覽:538