如果我将数组放入二叉树并对其执行 BFT(这就是我目前实现此目的的方式),我希望按照广度优先遍历给出的顺序迭代排序数组。显然,这涉及额外的内存开销,因为您需要在二叉树中再次构建和存储数组。我知道这应该类似于二进制搜索,但我不能完全正确地排序。
这是我目前实现这一目标的方式:
BTree bst = sortedArrayToBST(array);
Queue<BTree> queue = new LinkedList<BTree>();
queue.add(bst);
while(!queue.isEmpty()) {
BTree node = queue.remove();
System.out.println(node.data);
if(node.left != null) queue.add(node.left);
if(node.right != null) queue.add(node.right);
}
这是我目前拥有的(但这显然给出了错误的顺序):
public void bstIterate(int[] array, int start, int end) {
if(array.length == 0) return;
int med = array.length /2;
System.out.println(array[med]);
bstIterate(array,start,mid);
bstIterate(array,mid+1,array.length);
}
这可以在没有额外内存开销的情况下完成,还是我必须将项目存储在堆栈、向量或队列中,如果是这样,它如何以及需要比二叉树更少的内存?