从数组中逐行填充二叉树

时间:2014-05-18 03:33:40

标签: java sorting binary-tree

如何从阵列中逐行添加节点到二叉树?根据某种键值将元素添加到适当的位置时,这很容易,我试图将键分配给数组中的值,以便逐行添加,但我觉得喜欢必须有一个更优雅的方式来做到这一点。

为了澄清,我想要的是获取一个数组并将其转换为像这样的树

_ _ _ 0 _ _ _

_ 1 _ _ _ 2 _

3 _ 4 _ 5 _ 6

其中数字表示初始数组中值的索引

1 个答案:

答案 0 :(得分:2)

请注意,索引为i的节点的左子节点具有索引2 * i + 1和右子节点2 * i + 2。使用它,它非常简单:

class Node<T>
{
   T val;
   Node left = null, right = null;

   public void fill(int index, T [] vals)
   {
      val = vals[index];
      if (vals.length > 2*index+1)
      {
         left = new Node<T>();
         left.fill(2*index+1, vals);
      }
      if (vals.length > 2*index+2)
      {
         right = new Node<T>();
         right.fill(2*index+2, vals);
      }
   }
}

开始于:

Node<MyValueType> root = new Node<MyValueType>();
root.fill(0, vals);

将MyValueType替换为数组中的任何内容。