【发布时间】:2015-11-25 21:03:07
【问题描述】:
我想将一个红黑 BST 转换为一个数组,但是出了点问题,我不知道是什么。 这是我用来执行此操作的 sn-p 代码:
public T[] toArray() {
T[] array = (T[]) Array.newInstance(clazz, count);
inOrder(root, array, 0);
return array;
}
private void inOrder(Node<T> node, T[] array, int i) {
if (node != null) {
inOrder(node.leftChild(), array, i);
array[i++] = node.data();
inOrder(node.rightChild(), array, i);
}
}
按升序插入10到200的数字后,输出如下(我使用前序遍历来查看树是否保持平衡):
[80, 40, 20, 10, 30, 60, 50, 70, 120, 100, 90, 110, 140, 130, 160, 150, 170, 180]
但是当我调用toArray() 方法时,我得到了这个:
80 120 140 160 170 180 null null null null null null null null null null null null
我在这里做错了什么?
【问题讨论】:
-
第一个输出是什么?它没有排序,我希望它来自红黑树
-
@Dici 产生第一个输出,我使用了前序遍历。这就是为什么它看起来像这样。我需要知道树是否保持平衡,在插入节点后调用
toString()可以观察到。 -
@RenatKaitmazov 你为什么要 ping 我?
-
对不起,我不小心弄到了。
-
好的,问题是你永远不会更新
i的值,或者更准确地说,你是在本地进行的,它不会影响递归调用。更多细节在 rgettman 的回答中
标签: java data-structures red-black-tree