Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从数组中逐行填充二叉树_Java_Sorting_Binary Tree - Fatal编程技术网

Java 从数组中逐行填充二叉树

Java 从数组中逐行填充二叉树,java,sorting,binary-tree,Java,Sorting,Binary Tree,如何从数组中逐行向二叉树添加节点?当基于某种键值将元素添加到适当的位置时,这很容易,我已经尝试为数组中的值分配键值,以便逐行添加,但我觉得必须有一种更优雅的方法来实现这一点 为了澄清这一点,我想要的是获取一个数组,并将其转换为如下所示的树 __u0 uu _一,二, 3 4 5 6 如果数字表示初始数组中的值的索引,请注意,索引为i的节点的左子节点的索引为2*i+1,右子节点的索引为2*i+2。使用它,非常简单: class Node<T> { T val; Node l

如何从数组中逐行向二叉树添加节点?当基于某种键值将元素添加到适当的位置时,这很容易,我已经尝试为数组中的值分配键值,以便逐行添加,但我觉得必须有一种更优雅的方法来实现这一点

为了澄清这一点,我想要的是获取一个数组,并将其转换为如下所示的树

__u0 uu

_一,二,

3 4 5 6


如果数字表示初始数组中的值的索引,请注意,索引为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);
      }
   }
}
类节点
{
T值;
节点左=空,右=空;
公共空隙填充(整数索引,T[]VAL)
{
val=val[指数];
如果(vals.length>2*索引+1)
{
左=新节点();
左。填充(2*索引+1,VAL);
}
如果(vals.length>2*索引+2)
{
右=新节点();
右。填充(2*索引+2,VAL);
}
}
}
首先:

Node<MyValueType> root = new Node<MyValueType>();
root.fill(0, vals);
节点根=新节点();
根填充(0,VAL);

当然,用数组中的任何内容替换MyValueType。

您确实需要从基本的树算法开始。我知道如何按顺序遍历和基于键值添加。我真的不知道如何在分支之间来回“跳跃”来逐行添加内容查找