【发布时间】:2016-03-19 02:46:22
【问题描述】:
我正在尝试用Java编写一个平衡二叉树的方法,描述如下:
... 编写树的中序遍历 到一个数组,然后使用递归方法(很像二分查找)将数组的中间元素作为根插入,然后构建平衡的左右子树。
但是,我对如何一起完成这一切感到困惑。到目前为止,我已经尝试了多种方法,但没有任何效果。
我也已经有一个 inOrder 迭代器,它返回树中所有元素的 ArrayList,所以已经涵盖了。
这是我目前正在构建的:
public void rebalance()
{
Iterator<T> it = iteratorInOrder();
List<T> list = new ArrayList<>();
while (it.hasNext())
{
list.add(it.next());
}
balanceRecursive( );
}
private void balanceRecursive( )
{
//something here
}
然后我只是在添加/删除元素方法的末尾有这个:
if ((getHeight() - getMinHeight()) > 5)
rebalance();
那么,我该怎么做呢?
【问题讨论】:
-
不需要再平衡 - 只需构建。 (这个任务本身很有趣——你可以在给定项目数量和单调序列的项目的情况下构建一个平衡的搜索树,不需要随机访问。对于有序数组,构建树的原因是支持更新。)
标签: java algorithm recursion tree binary-search-tree