簡體   English   中英

使用Java在二叉樹中插入不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM