Создание сбалансированного бинарного дерева поиска из ArrayList в java - PullRequest
0 голосов
/ 02 апреля 2020

Я пишу код для баланса несбалансированного BST. Сначала я создал отсортированный ArrayList из несбалансированного BST. До этого все нормально.

После этого я попытался создать сбалансированный BST из отсортированного ArrayList, но недавно созданный BST включает в себя только половину элементов (узлов) ArrayList. root было изменено на правильное.

Я искал и читал много решений, касающихся балансировки 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;
    }   







1 Ответ

0 голосов
/ 02 апреля 2020

Проблема в этой строке:

if (max <= min)

Поскольку вы строите оператор root после этого оператора if, вы потеряете все границы раздела списка.

if (max < min)

Получу полный список.

...