Создание BST из массива

голоса
1

Мне нужно создать бинарное дерево поиска в следующем (странно), как:

Я дал массив (А [п]). А [1] становится корнем дерева.

  • Затем я вставить [1] + A [2] для левого поддерева (subtree1, используемый ниже) корня, а также вставить [1] -A [2] в правом поддереве (subtree2) корня.

  • Вставить A [1] + A [2] + A [3] к левому поддереву subtree1 (subtree3) и А [1] + A [2] -A [3] в правом поддерево subtree1 (subtree4).

  • Затем я вставить [1] -A [2] + А [3] к левому поддереву subtree2 (subtree5) и [1] -A [2] -A [3] до правого поддерева subtree2 (subtree6 ).

  • Повторяю для subtree3, subtree4, subtree5, subtree6, пока не будет достигнут конец массива.

Таким образом, в основном, первый элемент массива становится корнем дерева, а затем переместить вниз: Каждый левое поддерево имеет для значения суммы своего родителя плюс следующий элемент массива и каждый правого поддерева имеет для значения разности его родители и следующего элемента в массиве.

Я понимаю, что нужно использовать понятие рекурсии, но в измененном виде. Typing моей проблемы здесь и пытаюсь объяснить это кому-то еще, кроме моего мозга на самом деле сделал мне сформировать его таким образом, что дали мне некоторые идеи, чтобы попробовать, но я вижу проблему, я имею дело с бытием обычной проблемы, так, может быть, вы могли бы дать мне некоторые указатели о том, как использовать рекурсию для построения дерева.

Глядя на другие вопросы и дискуссии я понимаю, есть политика против просить целые решения, поэтому я хотел, чтобы понять, что я не прошу для решения, но и для руководства к нему. Если кто-то хотел бы, чтобы посмотреть, я могу показать вам, что я уже сделал.

Задан 24/03/2011 в 02:20
источник пользователем
На других языках...                            


1 ответов

голоса
0

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

Tree buildTree(int currentSum, int[] array, int index, boolean sign);

Предположим, что работает. Тогда будет делать и нужно сделать, чтобы построить дерево по индексу я?

// current value to look at at this level
int curValue = array[index];
// depending on sign, it may be negative
if (!sign) { 
  curValue *= -1;
}
// add it to the running total
int nodeValue = currentSum + curValue;
Node nd = new Node(nodeValue);

nd.left = buildTree(nodeValue, array, index + 1, true);
nd.right = buildTree(nodeValue, array, index + 1, false);

Это в основном это. Вы должны заботиться о случаях края: указательный = Array.length, создание первого узла и т.п.

Ответил 24/03/2011 в 02:27
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more