二叉树的存储结构

二叉树的存储结构 :

1. 顺序存储结构 :

完全二叉树:按从上至下、从左到右顺序存储

n个结点的完全二叉树的结点父子关系:

  1. 非根结点(序号 i > 1)的父结点的序号是 i / 2;

  2. 结点(序号为 i )的左孩子结点的序号是 2i,(若2 i <= n,否则没有左孩子);

  3. 结点(序号为 i )的右孩子结点的序号是 2i+1,(若2 i +1<= n,否则没有右孩子);

    但是一般不用该方式,空间浪费严重

另一种顺序结构: ? ? ?

typedef struct{
    elementtype data;
    int parent;
}gather;
相关操作如下::
int find(elementtype x,gather s[]){	//在数组s中查找值为x的元素所属的集合
    int i=0;
    while(i<maxsize && s[i].data!=x) i++;
    if (i>=maxsize) return -1;	//未找到
    while(s[i].parent>=0) i=s[i].parent;
    return i;	//找到x所属集合,返回树根结点在数组s中的下标 
}

int combination(elementtype x,elementtype y,gather s[]){
    int a=find(x,s);
    int b=find(y,s);
    if (a!=b){
        if (-s[a].parent >= -s[b].parent){//如果集合a比较大,集合b并入集合a
            s[a].parent+=s[b].parent;
            s[b].parent=a;
        }
        else{
            s[b].parent+=s[a].parent;//如果集合b比较大,集合a并入集合b
            s[a].parent=b;
        }
    }
}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

但根据情况的不同,有时采用数组下标==存储的值,下标对应的内容则为其父节点的下标,
而父节点对应的内容则为其子节点的个数(用负数表示),如此可大大提高查找效率。
如下图所示:(图中为-1,未改)
在这里插入图片描述

下图为该种方式的相关操作:
在这里插入图片描述

2.链表存储 :(儿子-兄弟表示法 )
typedef struct tree_node* tree;
struct tree_node{
  	elementtype data;
    tree left;
    tree right;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二叉树是一种常见的数据结构,它由一个根节点和每个节点最多有两个子节点组成。这两个子节点分别称为左子节点和右子节点。二叉树存储结构一般有两种:链式存储和顺序存储。 链式存储是指每个节点都保存了指向它的左子节点和右子节点的指针。这种存储方式适合于动态结构,因为它可以动态地分配内存。链式存储的二叉树可以用如下的 C 语言代码来实现: ``` typedef struct TreeNode { int value; struct TreeNode *left; struct TreeNode *right; } TreeNode; ``` 顺序存储是指将二叉树的节点按照某种顺序依次存储下来,从而形成一个数组。对于一个节点的索引为 i,它的左子节点的索引为 2*i,右子节点的索引为 2*i+1。这种存储方式适合于静态结构,因为它不需要动态地分配内存。顺序存储的二叉树可以用如下的 C 语言代码来实现: ``` #define MAX_SIZE 100 int tree[MAX_SIZE]; void set_node(int index, int value) { tree[index] = value; } int get_node(int index) { return tree[index]; } int get_left_child(int index) { return tree[2*index]; } int get_right_child(int index) { return tree[2*index+1]; } ``` 二叉树在计算机科学中广泛应用,它是很多算法和数据结构的基础。例如,二叉搜索树是一种特殊的二叉树,它的每个节点的左子树中的所有节点都小于它,右子树中的所有节点都大于它。二叉搜索树可以用于实现快速查找和排序。还有其他类型的二叉树,例如红黑树、AVL 树、堆等等,它们都有各自的特点和应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值