当前位置:首页 » 存储配置 » 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、三叉链表:同样适用于普通二叉树,结点除了数据外,还有左右孩子与双亲的指针,存储密度低于二叉链表,但是可以非常方便地在二叉树中遍历,不需要其他辅助工具

热点内容
python读取数据库数据 发布:2025-01-06 08:57:19 浏览:809
微信编程教程 发布:2025-01-06 08:50:14 浏览:224
macbookair买哪个配置合适 发布:2025-01-06 08:45:56 浏览:167
打印中文算法 发布:2025-01-06 08:29:19 浏览:200
sql2008登录失败 发布:2025-01-06 08:29:12 浏览:909
手机卡密码忘记怎么办 发布:2025-01-06 08:27:37 浏览:21
夸奖编程老师 发布:2025-01-06 08:26:59 浏览:679
怎么把苹果账号改到安卓上来 发布:2025-01-06 08:25:29 浏览:361
去哪里学安卓基础 发布:2025-01-06 08:24:38 浏览:660
算法迭代法 发布:2025-01-06 08:23:19 浏览:709