У меня возникла проблема с пониманием следующего кода. Это структура данных дерева, и я не понимаю, зачем нам нужен два узла (родительский и focusnode
) в методе addnode()
. Я попытался сделать это только с focusnode
, но это не сработает. Моя идея установлена в focusnode
на корню, и продолжайте ее зацикливание до тех пор, пока focusnode
не будет равен null
, и установите focusnode
на newnode
.Структура данных дерева addnode
public class tree {
node root;
public class node{
private int key;
private node left;
private node right;
node(int key){
this.key = key;
}
public int getkey(){
return key;
}
public node getleft(){
return left;
}
public node getright(){
return right;
}
}
public void addnode(int key){
node newnode = new node(key);
if(root == null){
root = newnode;
}else{
node focusnode = root;
node parent;
while(true){
parent = focusnode;
if(key < focusnode.key){
focusnode = focusnode.left;
if(focusnode == null){
parent.left = newnode;
return;
}
}else{
focusnode = focusnode.right;
if(focusnode == null){
parent.right = newnode;
return;
}
}
}
}
}
public void runnode(node focusnode){
if(focusnode != null){
runnode(focusnode.left);
runnode(focusnode.right);
System.out.println(focusnode.key);
}
}`
Можем ли мы просто избавиться от родителя и использовать focusnode в качестве ссылки? – user3725988
'focusnode' указывает на узел' .left'/'.right'. Если вы присвойте свой 'newnode'' focusnode', то 'focusnode' больше не будет ссылаться на' .left'/'.right' (который в настоящее время является« null »), а вместо этого ссылается на ваш' newnode'. Но если мы помним «parent», мы можем сказать «parent.left» и изменить ссылку родительского '.left' /' .right', от чего зависит структура дерева. Присвоение 'focusnode' не изменяет того, что ссылается на parent.left. –