将二维阵列呈现为树

时间:2015-12-20 13:46:41

标签: c algorithm pseudocode

我有以下问题:

我有一个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];
};

问题是,我找不到遍历数组的方法,同时创建节点并为它们赋值。

你能用这个程序的伪代码支持我吗?

1 个答案:

答案 0 :(得分:1)

我建议您从下往上创建树的图层:

  1. 首先创建一个n x n个节点数组,然后将这些数字分配给节点。该数组将包含树的叶子。

  2. 然后创建一个维度为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)。

  3. 在新的arary上递归重复最后一步,直到数组的尺寸为1 x 1.

  4. 因此,您最终会得到一个代表树根的单个节点。