[英]inserting in binary tree doesn't work using java
我目前正在使用Java學習樹,在二進制樹中插入項目時出現了一些錯誤,我不知道為什么它不起作用
這是代碼:樹節點:
public class TNode {
int data;
TNode left;
TNode right;
public TNode(int data) {
this.data = data;
left = null;
right = null;
}
}
樹類:
public class Tree {
TNode root;
public Tree(){
root = null;
}
public TNode insertNode(TNode item, int d) {
if (item == null) {
return new TNode(d);
}
if (d < item.data) {
item.left = insertNode(item, d);
}
if (d > item.data) {
item.right = insertNode(item, d);
} else {
return item;
}
return item;
}
public void add(int d) {
insertNode(root, d);
}
}
每當我添加一個項目時,如果有人可以幫助,則根將保持為空而沒有右側或左側的項目,我將非常感謝
root
始終為null,因為您永遠不會為其分配值。
您可以添加到方法檢查的開頭並進行分配
public TNode insertNode(TNode item, int d){
if(item == null){
TNode node = new TNode(d);
if (root == null) {
root = node;
}
return node
}
... rest of method isn't changed...
同樣,在遞歸時,您應該使用適當的子節點進行調用,而不是始終使用item
調用,因此例如第一種情況是:
item.left = insertNode(item.left, d);
對於第二種情況,您只需使用item.right
。
好的代碼,但是遞歸不會更進一步
item.left = insertNode(item.left, d);
item.right = insertNode(item.right, d);
並且初始根未更新:
root = insertNode(root, d);
else部分或最終回報是多余的。
代碼風格
insertNode
有一個節點作為輸入,並返回更新的節點值,因此調用“模式”應如下所示
X = insertNode(X, d); // X is some expression
這是因為java永遠不能為傳遞的參數表達式賦值:它沒有傳遞引用,但是傳遞值; f(x)
從不分配給x
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.