Я не очень понимаю, почему вы пытаетесь разделить массив, и похоже, что вы делаете некоторые предположения о значениях и их порядке. (хотя, если честно, я не запускал ваш код) Вы не можете просто принять как должное направление (влево, вправо), по которому вы будете двигаться. Это зависит от значения текущего элемента и значения, хранящегося в текущем узле.
Мой подход к этому состоял бы в том, чтобы определить метод insert(Node node, int value)
и позволить arrayToBinary
просто выполнить итерацию массива и вызвать insert
. Это обеспечит вам чистое дерево с минимальным интерфейсом. Кроме того, он основан на логике определения и вставки BST, поэтому он должен быть интуитивно понятным.
(псевдо для вашего удовольствия)
Вставить 1012 *
*
Node insert(node, value)
if node is null
// Create a leaf.
// It might be the root...
return new Node(value)
// It's occupied, see which way to
// go based on it's value
// right? ...
if value > node.value
node.right = insert(node.right, value)
// or left?
else if value < node.value
node.left = insert(node.left, value)
// Code is not handling dups.
return node
Conversion
Node arrayToBinary(array, root)
for e in array
root = insert(root, e)
return root
Это сохранит первый элемент в качестве корневого и вставит остальную часть массива, как и ожидалось.