Объединить два двоичных дерева

77
6

public int merge(BNode node, int array[], int i) {
if (node == null)
return i;
//Flatten left subtree
i = merge(node.left, array, i);
//Get data from the current node
array[i] = node.value;
//Flatten right subtree
i = merge(node.right, array, i + 1);
return i;
}

Я пытаюсь объединить два бинарных дерева и сохранить свойство BST. Подход im используется для сглаживания деревьев и хранения их в массивах. Функция выше выравнивает мое первое дерево и сохраняет его в массиве [].

Я хочу функцию, которая будет принимать rootnode и пустой массив [] в качестве входных данных и RETURNS меня сглаженное дерево со всеми узлами в массив.

спросил(а) 2021-01-25T16:33:15+03:00 5 месяцев назад
1
Решение
88

Как вы это делаете, если вы хотите объединить 2 дерева двоичного поиска, лучший способ: 1) сгладить деревья в отсортированные списки. 2) Объединить списки. 3) Преобразовать объединенный список в BST.

Вы можете легко реализовать эту функцию:

BinarySearchTree* arrayToTree(int arr[], int start, int end) {
if (start > end) return NULL;
int mid = start + (end - start) / 2;
BinarySearchTree *node = new BinarySearchTree(arr[mid]);
node->left = arrayToTree(arr, start, mid-1);
node->right = arrayToTree(arr, mid+1, end);
return node;
}

BinarySearchTree* arrayToTree(int arr[], int n) {
return arrayToTree(arr, 0, n-1);
}

ответил(а) 2021-01-25T16:33:15+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема