如何从阵列中逐行添加节点到二叉树?根据某种键值将元素添加到适当的位置时,这很容易,我试图将键分配给数组中的值,以便逐行添加,但我觉得喜欢必须有一个更优雅的方式来做到这一点。
为了澄清,我想要的是获取一个数组并将其转换为像这样的树
_ _ _ 0 _ _ _
_ 1 _ _ _ 2 _
3 _ 4 _ 5 _ 6
其中数字表示初始数组中值的索引
答案 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替换为数组中的任何内容。