我在理解下面的代码时遇到问题。这是一个树形数据结构,我不明白为什么我们需要两个节点(父节点和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'引用的内容。 –