当前位置:首页 » 服务存储 » 已知一颗二叉树按顺序方式存储在数组
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

已知一颗二叉树按顺序方式存储在数组

发布时间: 2023-03-24 21:58:15

⑴ 什么是二叉树的顺序存储

二叉树的顺序存储结构,此结构是将二叉树的所有结点,按照一定的次序,存储到一片连续的存储单元中。因此,必须将结点排成一个适当的线性序列,使得结点在这个序列中的相应位置能反映出结点之间的逻辑关系。这种结构特别适用于近似满二叉树。
在一棵具有n个结点的近似满二叉树中,我们从树根起,自上层到下层,逐层从左到右给所有结点编号,就能得到一个足以反映整个二叉树结构的线性序列,如图6所示。其中每个结点的编号就作为结点。
楼主看看下面的图

希望对你有所帮助哟,好的话记得采纳哟!

c语言 二叉树的数组顺序存储

用数组存的话很简单
根节点存为a1
比如说当前节点为ai
那么左儿子存为a2*i
那么右儿子存为a2*i+1
这样可以保证每个点都存了并且无重复

⑶ 设计一个算法将一棵二叉链表存储的二叉树按顺序存储到数组中

思路很简单,根放在0位置,以后假定当前位置是i,那么左子结点在2i+1,右子结点在2i+2。比如根的左子结点在1,右子结点在2。结点1的左子结点在3,右子结点在4。定义一种空值表示没有子结点,比如empty。
假定一个结点由3个成员组成:value, left, right
数组假定是全局的,如果不是可以作为参数传送。
递归实现比较简单:
void btree2array(node, index)
{
if(node == NULL)
array[index] = empty;
array[index] = node->value;
btree2array(node->left, index * 2 + 1);
btree2array(node->right, index * 2 + 2);
}

开始调用的时候就一句话:
btree2array(root, 0);