2016-03-21 4 views
1

Я не знаю, почему мне нужно снова назначить node.left = insert(node.left, data), поскольку я назначил его с помощью node = new BNode(data).Реализация BST в Java рекурсивно

private BNode insert(BNode node, int data) { 
    if (node == null) { 
     node = new BNode(data); 
    } 
    else if (node.data < data) { 
     node.left = insert(node.left, data); 
    } 
    else if (node.data > data) { 
     node.right = insert(node.right, data); 
    } 
    return node; 
} 
+0

Я не знаю формат для вставки моего кода. Поэтому я вставляю его здесь. – Jutta

+0

частный BNode вставка (BNode узел, внутр данные) \t { \t \t если (узел == NULL) \t \t { \t \t \t узел = новый BNode (данные); \t \t} \t \t иначе, если (node.data <данные) \t \t { \t \t \t node.left = вставка (node.left, данные); \t \t} \t \t иначе, если (node.data> данные) \t \t { \t \t \t node.right = вставки (node.right, данные); \t \t} \t \t возвратный узел; \t \t \t} – Jutta

+0

Мне очень жаль, но мне стоит час настроить формат. – Jutta

ответ

1

В дереве двоичного поиска вы должны разместить любые новые элементы в виде листьев. Ваш код начинается с проверки, если мы сейчас смотрим на узел, и если да, тогда вставьте наши данные здесь. В противном случае нам нужно продолжить движение вниз, пока мы не достигнем листа. Поэтому мы называем эту функцию левой или правой ветвью (в зависимости от числа и данных в узле). То, как мы это делаем, - это вызвать функцию на узле.left или node.right. Если у ребенка есть нуль, то мы хотим сказать, что теперь наш ребенок - это новый узел, который мы только что вставили.

Если ребенок не является листом, то, возвращая оригинального ребенка, это назначение ничего не сделает. Это только делает что-то, говоря

node = new BNode(data); 

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

+0

Я это понимаю. node = new BNode (data) просто создает новый BNode, который не имеет ничего общего с деревом. Поэтому я должен подключить этот новый узел к дереву. – Jutta

+0

Если это правильно ответит на ваш вопрос, можете ли вы принять ответ? –

Смежные вопросы