【发布时间】:2014-01-06 18:46:52
【问题描述】:
我发现this code 用于在 Java 中将二叉树展平为数组。我很难理解它是如何工作的。
代码如下:
private static int FlattenTreeIntoArray(Node tree, int[] array, int i)
{
if (tree == null) return i;
// Flatten left subtree
i = FlattenTreeIntoArray(tree.Left, array, i);
// Get data from the current node
array[i] = tree.Data;
// Flatten right subtree
i = FlattenTreeIntoArray(tree.Right, array, i + 1);
return i;
}
我的问题如下:
这是辅助方法,真正的方法是如何实际调用的,或者作为参数传递了什么(
int[] array和int i)?我们不知道二叉树的大小。该方法如何工作?当
tree为null时,它返回i。这是什么意思?扁平化是如何发生的?为什么
i+1传递给right tree而i传递给left tree?
如果你可以用这棵二叉树来演示,那将很容易理解:
【问题讨论】:
-
作为参考,树基本上会被展平为一个整数列表,表示来自中序遍历的数据。仅此一项信息不足以准确地重建树;你需要额外的信息。
-
i是数组中下一个元素所在的位置。该算法需要知道树中的元素数量才能在不抛出 ArrayIndexOutOfBoundsException 的情况下工作。通常,你会有一个 Tree.size() 方法或给你这个数字的东西。
标签: java arrays algorithm binary-tree