【发布时间】:2013-11-04 12:19:15
【问题描述】:
root = new TreeNode(N);
constructTree(N, root);
private void constructTree(int N, TreeNode node) {
if (N > 0) {
node.setLeft(new TreeNode(N-1));
constructTree(N-1, node.getLeft());
}
if (N > 1) {
node.setMiddle(new TreeNode(N-2));
constructTree(N-2, node.getMiddle());
}
if (N > 2) {
node.setRight(new TreeNode(N-3));
constructTree(N-3, node.getRight());
}
假设N为根号,三者会创建一个左中右节点N-1、N-2、N-3。
前:
5
/ | \
4 3 2
/|\
3 2 1
等等
我的 TreeNode 类有以下变量:
private int number;
private TreeNode left, middle, right;
每当我构造一个整数大于 28 的树时,我都会收到 OutOfMemoryError。我的递归方法是非常低效还是很自然?谢谢!
【问题讨论】:
-
当 N 为 29 时,生成的树应该有 1680 万个节点。由于您还没有向我们展示
TreeNode,我不知道每个节点有多少字节;但我真的看不出它会给你带来问题。你的堆大小设置为多少?