Java 关于将节点添加到二叉搜索树的问题

Java 关于将节点添加到二叉搜索树的问题,java,data-structures,tree,binary-search-tree,Java,Data Structures,Tree,Binary Search Tree,我正在用它的所有方法编写一个二叉搜索树,我遇到了add方法,但是有一行让我很困惑 以下是目前为止我对该方法的了解: // 6) Methods: add public boolean add(int newData) { if (!treeContains(newData)) return false; else { add(root, newData); nodeCount++; return true;

我正在用它的所有方法编写一个二叉搜索树,我遇到了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;
}
在我写“//问题”的地方,我知道如果我们到了那里,我们基本上已经站在某个节点的node.leftChild或node.righchild中,所以当我们创建一个节点(在//问题中)时,它会自动弹出吗?这有点让人困惑,因为我觉得我应该指定新节点到那里,就像使用以下东西一样:

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

如果有人对此有好的看法,我会非常感激。谢谢

您传递给add method IMHO的节点不应为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中需要否定吗