4.2树的存储结构

4.2树的存储结构

顺序存储结构:

双亲表示法:用一组连续的存储空间存储树的结点,同时在每个结点中,用一个变量存储该结点的双亲结点在数组中的位置。(孩子少的时候)

结构:

typedef char ElemType;
typedef struct TNode{
    ElemType data; //结点数据
    int parent; 	//该结点双亲在数组中的下标
}TNode;				//结点数据类型
#define Maxsize 100
typedef struct{
	TNode nodes[MaxSize]; //结点数组
    int n;				//节点数量
}Tree;


实例:

[外链图片转存失败(img-GYnBtEEZ-1566394254990)(C:\Users\liuhao\AppData\Roaming\Typora\typora-user-images\1566392610204.png)]

双亲表示法可以根据parent值找到该结点的双亲结点,时间复杂度为O(1)。

链式存储:

孩子表示法:把每个结点的孩子结点排列起来存储成一个单链表。所以n个结点就有n个链表;如果是叶子结点,那这个结点的孩子单链表就是空的;然后n个单链表的头指针又存储在一个顺序表(数组)中。

结构

typedef char ElemType;
typedef struct CNode{			
    it child;			//该孩子在表头数组的下标
    struct CNode*next;    //指向该结点的下一个孩子
} CNode,*Child;				//孩子结点数据类型
typedef struct{
	ElemType data;			//结点数据域	
    Child firstchild;		//指向该结点的第一个孩子结点
}TNode;						//孩子结点数据结构类型


[外链图片转存失败(img-qjPmPiYA-1566394254990)(assets/1566393571781.png)]

邻接表:

#define Maxszie 100
typedef struct{ 
	TNode nodes[Maxsize];  //结点数据域
    int n;				//树中结点个数
}Tree;					//树的孩子表示结构

孩子兄弟表示法:存储孩子结点和兄弟结点,具体来说,就是要设置两个指针,分别指向该结点的第一个孩子结点和该结点的兄弟结点。

 typedef char ElemType;
 typedef struct CSNode{
	ElemType data;
	struct CSNode*firstchild,*rightsib;
}CSNode;

[外链图片转存失败(img-V5E73m30-1566394254991)(assets/1566394072339.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值