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

来源:百度知道 编辑:UC知道 时间:2024/05/26 22:24:22

思路很简单,根放在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);

根放在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);

设二叉树以二叉链表为存储结构,编写一个后续遍历二叉树的非递归算法 以二叉链表作为存储结构,是编写二叉树高度的算法? 设计一个算法把二叉数的叶子结点按从左到右的顺序连成一个单链表,二叉树按ldchild-rchild方式存储,? 以二叉链为存储结构,写一算法求二叉树的叶子结点个数 以二叉链表存储结构,试编写非递归的前序遍历算法(c描述) 假设以二叉链表存储的二叉数中,每个结点所含数据结构元素均为单字母,试编写算法,按树状打印二叉树的算 已知用二叉链表存储二叉树,判断两棵二叉树是否相等 急急,设计一个“二叉”查找算法,将集合分成1/3和2/3大小的两个集合 链表综合算法设计 采用二叉链表存储结构,按前根序输入二叉树的结点序列,建立二叉树并中根序遍历该二叉树,计算叶子节点的个数