簡體   English   中英

我的二叉搜索樹實現中的 insert() 方法有什么問題?

[英]What's wrong with my insert() method in my Binary Search Tree implementation?

我試圖創建一個遞歸方法來將一個元素插入到我的二叉搜索樹中; 但是,我似乎在我的代碼中找不到錯誤(我懷疑它與引用有關)。

public class BST<E extends Comparable<E>> {

    private class BSTNode implements Comparable<BSTNode> {

        public E data;
        public BSTNode left;
        public BSTNode right;

        public BSTNode(E data) {
            this.data = data;
        }

        @Override
        public int compareTo(BSTNode o) {
            return this.data.compareTo(o.data);
        }
    }

    public BSTNode root;

    public void insert(E data) {
        insertRec(root, new BSTNode(data));
    }

    private void insertRec(BSTNode current, BSTNode newNode) {
        if (current == null) {
            current = newNode;
            return;
        }
        if (current.compareTo(newNode) > 0) {
            insertRec(current.right, newNode);
        }
        else if (current.compareTo(newNode) < 0) {
            insertRec(current.left, newNode);
        }
    }

這沒有任何意義:

 if (current == null) {
            current = newNode;
            return;
        }

current.rightcurrent.right可以是null ,所以你永遠不會真正向節點添加東西。

要設置您需要做的事情,即current.right = newNode

這應該有效:

public class BST<E extends Comparable<E>> {

    private class BSTNode implements Comparable<BSTNode> {

        public E data;
        public BSTNode left;
        public BSTNode right;

        public BSTNode(E data) {
            this.data = data;
        }

        @Override
        public int compareTo(BSTNode o) {
            return this.data.compareTo(o.data);
        }
    }

    public BSTNode root;

    public void insert(E data) {
        root = insertRec(root, new BSTNode(data));
    }

    private BSTNode insertRec(BSTNode current, BSTNode newNode) {
        if (current == null){
            return newNode;
        }

        if (current.compareTo(newNode) > 0) {
           current.right = insertRec(current.right, newNode);
        } else {
            current.left = insertRec(current.left, newNode);
        }

        return current;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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