微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于向二叉搜索树添加节点的问题

如何解决关于向二叉搜索树添加节点的问题

我正在用它的所有方法编写一个二叉搜索树,并且我遇到了 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 中,所以当我们创建一个节点时(在 //问题)它只是自动弹出那里?这有点令人困惑,因为我觉得我应该指定新节点像使用以下内容一样:

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

如果有人对此有好的看法,我将不胜感激。谢谢!

解决方法

您传递给添加方法恕我直言的节点不应为空。 您应该在调用此方法之前处理 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);
      return node.leftChild;
    } else {
      return add(node.leftChild,newData);
    }
  }
}

顺便说一句。不确定这一行是否正确:

 if (!treeContains(newData)) return false;

如果节点已经存在,add() 方法不应该返回 false 吗? 如果不存在就添加它?您确定需要在 IF 中进行否定吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。