亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Java 中使用 BinarySearchTree 創建 add 方法?

如何在 Java 中使用 BinarySearchTree 創建 add 方法?

弒天下 2022-11-02 10:19:16
我的 add 方法有問題,我認為錯誤發生在公共方法中傳遞的參數中,但是我不確定我的私有幫助方法是否也沒有添加正確的變量。這是我的 addMethod 的說明add(E) 方法可以另外調用 assignFirst() 方法來分配第一個屬性,以防它應該被更改。add helper 方法現在應該在創建新節點時分配每個節點的“父”和“下一個”引用。? “parent”參數應該引用新創建節點的父節點,因此在創建新節點時,您可以簡單地將其父節點分配給該參數。? “prev”參數應該引用新創建節點的前一個節點,因此在創建新節點時,您可以簡單地更新相應節點中的“next”引用。棘手的部分是知道在調用 add 輔助方法時要傳遞哪些值。這是邏輯:? 如果add helper 返回值是一個右孩子,那么該右孩子的前一個節點應該與其父節點相同??蛇x的 getPrevNode 在這里沒有幫助,因為前一個節點將是新節點的父節點,并且新節點還沒有附加到樹上。? 如果add helper 返回值是一個左孩子,那么左孩子的前一個節點可以由可選的getPrevNode 方法確定,向它詢問當前節點參數之前的節點。這是我的代碼:public void add(E value){    this.root = add(root, value, root, null);    assignFirst();}// post: value added to tree so as to preserve binary search treeprivate BSTNode<E> add(BSTNode<E> node, E value, BSTNode<E> parent, BSTNode<E> prev){    if (node == null)    {        node = new BSTNode<E>(value);        node.parent = parent;        node.next = prev;        this.numElements++;    }    else if (node.data.compareTo(value) > 0)    {        node.left = add(node.left, value, node , getPrevNode(node));    }    else if (node.data.compareTo(value) < 0)    {        node.right = add(node.right, value, node, node.parent);    }    return node;}private void assignFirst(){    BSTNode<E> node = root;    while(node.left != null)    {        node = node.left;    }    first = node;} private BSTNode<E> getPrevNode(BSTNode<E> node){    if(node.left != null)    {        node = node.left;        while(node.right != null)        {            node = node.right;        }        return node;    }    else if(node.parent != null)    {        if(node.parent.right == node)        {            return node.parent;        }        if(node.parent.left == node)        {            while(node.parent != null && node.parent.left == node)            {                node = node.parent;            }            if(node == root)            {              return null;            }            else            {              return node.parent;            }        }    }    return null;}
查看完整描述

1 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

這是一個嚴格的過程,這就是我得到的


public void add(E value)

{

    this.root = add(root, value, root, null);

    assignFirst();

}

// post: value added to tree so as to preserve binary search tree

private BSTNode<E> add(BSTNode<E> node, E value, BSTNode<E> parent, BSTNode<E> prev)

{

    if (node == null)

    {

        node = new BSTNode<E>(value);

        node.parent = parent;

        if(prev == null)

        {

            node.next = parent;

        }

        else

        {

            node.next = prev.next;

            prev.next = node;

        }

        this.numElements++;

    }

    else if (node.data.compareTo(value) > 0)

    {

        node.left = add(node.left, value, node , getPrevNode(node));

    }

    else if (node.data.compareTo(value) < 0)

    {

        node.right = add(node.right, value, node, node);

    }

    return node;

}


查看完整回答
反對 回復 2022-11-02
  • 1 回答
  • 0 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號