我有以下问题:
我有一个n x n个整数的数组,其中n是2的幂(1,2,4 ......)。我们可以想象整个数组(当n> 1时)被分成4个部分:
A B
D C
如果它没有1个元素,则每个部分可以类似地划分。我希望将此数组呈现为树,每个节点都包含:
a) integer, when the "square" cannot be divided futher
or
b) 4 nodes, corresponding to each piece: A,B,C,D
我拥有2D数组中的所有整数,我想编写一个函数来创建一个树。到目前为止,我只设法创建了一个节点结构:
struct node {
int number;
struct node *child[4];
};
问题是,我找不到遍历数组的方法,同时创建节点并为它们赋值。
你能用这个程序的伪代码支持我吗?
答案 0 :(得分:1)
我建议您从下往上创建树的图层:
首先创建一个n x n个节点数组,然后将这些数字分配给节点。该数组将包含树的叶子。
然后创建一个维度为n / 2 * n / 2的新的二维节点数组。对于每个节点,将原始数组的相应节点指定为子节点。因此,对于新数组中具有坐标(x,y)的节点,您将分配子项(x * 2,y * 2),(x * 2 + 1,y * 2),(x * 2,y *)旧数组中的2 + 1)和(x * 2 + 1,y * 2 + 1)。
在新的arary上递归重复最后一步,直到数组的尺寸为1 x 1.
因此,您最终会得到一个代表树根的单个节点。