如何从级别顺序数组构造二叉树?

时间:2018-10-28 23:47:03

标签: java data-structures binary-tree binary-heap

我正在研究编码问题,现在有点困惑。如果我得到一个表示二进制树的级别顺序遍历的数组。如何从中构造一棵树?

到目前为止,这是我到目前为止的思考过程:我知道0th索引是rootleftChild = 2*i+1rightChild = 2*i+2

这是我到目前为止所拥有的,我认为这是不对的:

public Tree buildTree(ArrayList<Tree> arr, int i) {
    if (i > list.size() - 1) {
        return null;
    }

    root = list.get(i);
    root.LeftChild = buildTree(arr, 2*i+1);
    root.RightChild = buildTree(arr, 2*i+2);

    return root;
}

我的i从0开始,谢谢。

2 个答案:

答案 0 :(得分:0)

您的代码看起来不错……尽管很奇怪,您的方法采用ArrayList<Tree>而不是ArrayList<Node>。您为什么不认为这是对的?您如何测试您的方法?您遇到什么样的错误?

答案 1 :(得分:0)

您的代码仅适用于complete binary trees(二进制树的特殊情况)。

不能仅通过级别顺序遍历来构造通用二叉树。

您需要 两次 遍历,其中 一个必须是有序遍历

以下组合可以唯一地识别一棵树。

  • 订购和预购。
  • 订购和后期订购。
  • 顺序和级别顺序。

如果在给定数组中有一些分隔符(如this post中所述),则有可能构造树(仅进行级别顺序遍历)。