我正在研究编码问题,现在有点困惑。如果我得到一个表示二进制树的级别顺序遍历的数组。如何从中构造一棵树?
到目前为止,这是我到目前为止的思考过程:我知道0th
索引是root
,leftChild = 2*i+1
和rightChild = 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开始,谢谢。
答案 0 :(得分:0)
您的代码看起来不错……尽管很奇怪,您的方法采用ArrayList<Tree>
而不是ArrayList<Node>
。您为什么不认为这是对的?您如何测试您的方法?您遇到什么样的错误?
答案 1 :(得分:0)
您的代码仅适用于complete binary trees(二进制树的特殊情况)。
您 不能仅通过级别顺序遍历来构造通用二叉树。
您需要 两次 遍历,其中 一个必须是有序遍历 。
以下组合可以唯一地识别一棵树。
如果在给定数组中有一些分隔符(如this post中所述),则有可能构造树(仅进行级别顺序遍历)。