【问题标题】:Building a balanced binary search tree from an ArrayList in java从java中的ArrayList构建平衡二叉搜索树
【发布时间】:2020-04-02 13:04:11
【问题描述】:

我正在编写代码来平衡不平衡的 BST。首先,我从不平衡的 BST 创建了一个排序的 ArrayList。在那之前一切都很好。

之后,我尝试从排序后的 ArrayList 创建一个平衡的 BST,但新制作的 BST 只包含 ArrayList 的一半元素(节点)。不过,根已更改为正确的。

我搜索并阅读了许多关于平衡 BST 的解决方案,但找不到与我的问题相关的解决方案。 我真的很感激你的建议。谢谢。


    public BinaryTreeNode<Integer> BalanceBST(ArrayList<Integer> list, int min, int max) 
    {
        if (max <= min)
        {
            return null; 
        }

        int mid = (min + max) / 2;

        BinaryTreeNode<Integer> root = new BinaryTreeNode<Integer>(list.get(mid));

        root.setLeft(arrayListToBST(list, min, mid - 1));
        root.setRight(arrayListToBST(list, mid + 1, max));

        return root;
    }   







【问题讨论】:

    标签: tree balance


    【解决方案1】:

    问题出在这一行:

    if (max <= min)
    

    由于您在此 if 语句之后构建根,您将丢失列表的所有分区边缘。

    if (max < min)
    

    将为您提供完整列表。

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      相关资源
      最近更新 更多