Я никогда раньше не видел эту грамматику, так что терпите меня, если я неправильно понял синтаксис.Надеемся, что код демонстрирует, что нужно сделать -
- , если дерево пустое, нет значения для сравнения, создайте одноэлементный узел со значением.Это часть, которую вы уже завершили.
- В противном случае дерево не пусто, поэтому у нас есть значение для сравнения.Если значение для вставки меньше значения корня, создайте новый узел, состоящий из значения корня, вставьте значение в левую ветвь корня и оставьте правую ветвь корня нетронутой
- , если значение больше чемзначение корня, сделайте то же самое, что и выше, но вставьте новое значение в ветку вправо корня, вместо left
- значение не меньше, чеми не больше, чем значение корня, поэтому оно равно значению корня и нечего вставить.В этом случае верните неизмененный корень
Точки маркера соответствуют нумерованным комментариям ниже -
insert -> procedure(root, value)
if empty(root) then #1
.treenode(value, 0, 0)
else if value < root.value #2
.treenode (root.value, insert(root.left, value), root.right)
else if value > root.value #3
.treenode (root.value, root.left, insert(root.right, value))
else #4
root
StackOverflow позволяет нам запускать фрагменты JavaScript непосредственно в сообщениях с ответами.Вот функциональный фрагмент, который позволяет вам увидеть эту концепцию в действии -
const empty =
{}
const treenode = (value, left = empty, right = empty) =>
({ value, left, right })
const insert = (t, value) =>
t === empty
? treenode (value, empty, empty)
: value < t.value
? treenode (t.value, insert (t.left, value), t.right)
: value > t.value
? treenode (t.value, t.left, insert (t.right, value))
: t
const print = (t, pre = '', child = '') =>
t === empty
? pre + '∅\n'
: print
( t.right
, child + '┌── '
, child + '. '
)
+ pre + String (t.value) + '\n'
+ print
( t.left
, child + '└── '
, child + '. '
)
let tree = empty
tree = insert (tree, 4)
tree = insert (tree, 6)
tree = insert (tree, 9)
tree = insert (tree, 3)
tree = insert (tree, 5)
tree = insert (tree, 1)
console.log (print (tree))
Программа печатает построенное tree
.Символ ∅
представляет пусто -
. . . ┌── ∅
. . ┌── 11
. . . └── ∅
. ┌── 9
. . └── ∅
┌── 6
. . ┌── ∅
. └── 5
. . └── ∅
4
. ┌── ∅
└── 3
. . ┌── ∅
. └── 1
. . └── ∅