Причина, по которой вы получаете только одно целое число для выходных данных, заключается в том, что первый вызов Insert
правильно добавляет элемент в дерево, но последующие вызовы не удаются, потому что вы перезаписываете элемент данных temp
в null
, когда вы рекурсивно вставить влево или вправо. Таким образом, вторая ветвь вашего первого оператора if
никогда не будет выполнена.
Здесь вам на самом деле не нужна переменная temp
. Общепринятым условием является наличие закрытой рекурсивной функции-члена, которая берет корень дерева в качестве параметра, возвращает измененное дерево и присваивает возвращаемое значение root
в публичной функции-члене.
public void Insert(int value) {
root = Insert(root, value);
}
private node Insert(node r, int value) {
if (r == null) {
r = new node(value);
}
else if (value > r.data) {
r.right = Insert(r.right, value);
}
else {
r.left = Insert(r.left, value);
}
return r;
}
Это означает, что вам нужно только назвать его как tree.Insert(x)
.