簡體   English   中英

關於向二叉搜索樹添加節點的問題

[英]Question about adding a node to a binary search tree

我正在用它的所有方法編寫一個二叉搜索樹,並且我已經遇到了 add 方法,但是有一行讓我很困惑。

到目前為止,這是我所擁有的方法:

// 6) Methods: add

public boolean add(int newData) {
    if (!treeContains(newData)) return false;
    
    else {
        add(root, newData);
        nodeCount++;
        return true;    
    }
}

public Node add(Node node, int newData) {
    
    if (node == null) {
        node = new Node(newData, null, null);               // QUESTION
    }
    
    if (newData > node.data) {
        add(node.rightChild, newData);
        }
    else {                                                  // else if newData is less or equal to node data
        add(node.leftChild, newData);
        }
    return node;
}

在我寫“// QUESTION”的地方,我知道如果我們到達那里,我們基本上已經站在某個節點的 node.leftChild 或 node.rightChild 中,所以當我們創建一個節點時(在 // QUESTION 中)它只是自動彈出那里? 這有點令人困惑,因為感覺我應該指定新節點去那里就像使用類似的東西:

node.leftChild == node;  // (or node.rightChild)

如果有人對此有很好的看法,我將不勝感激。 謝謝!

您傳遞給添加方法恕我直言的節點絕不應該是 null。 在調用此方法之前,您應該處理 null 案例。

我想你需要這樣的東西:

public Node add(Node node, int newData) {
  if (newData == node.data) {
    // ??? Not sure what do you need here, but it's there already.
    return node;
  }
  if (newData > node.data) {
    if (node.rightChild == null) {
      node.rightChild = new Node(newData, null, null);
      return node.rightChild;
    } else {
      return add(node.rightChild, newData);
    }
  } else {                                                  
    if (node.leftChild == null) {
      node.leftChild = new Node(newData, null, null);
      return node.leftChild;
    } else {
      return add(node.leftChild, newData);
    }
  }
}

順便提一句。 不確定這條線是否正確:

 if (!treeContains(newData)) return false;

如果節點已經存在, add() 方法不應該返回 false 嗎? 如果它不存在,則添加它? 您確定在 IF 中需要否定嗎?

暫無
暫無

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

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