Algorithm 二叉搜索树插入法不';行不通

Algorithm 二叉搜索树插入法不';行不通,algorithm,data-structures,binary-search-tree,Algorithm,Data Structures,Binary Search Tree,我想为二叉搜索树实现一个插入方法,并在下面提出一个解决方案。我知道有很多代码示例,但我想知道我的实现中存在什么问题?还是有问题?当我追踪它的时候,我想我错过了什么 public void insertBST(Node<Double> head, int value){ if (head == null){ head = new Node<Double>(value); return; } else { if (h

我想为二叉搜索树实现一个插入方法,并在下面提出一个解决方案。我知道有很多代码示例,但我想知道我的实现中存在什么问题?还是有问题?当我追踪它的时候,我想我错过了什么

public void insertBST(Node<Double> head, int value){
   if (head == null){
       head = new Node<Double>(value);
       return;
   }
   else {
       if (head.getValue() > value)
           insertBST(head.getLeft(), value);
       else
           insertBST(head.getRight(), value);
   }
 }
public void insertBST(节点头,int值){
if(head==null){
head=新节点(值);
返回;
}
否则{
if(head.getValue()>value)
insertBST(head.getLeft(),value);
其他的
insertBST(head.getRight(),value);
}
}

在功能开始时,您正在将新的
节点添加到一个在此功能之外您永远无法访问的零件中

因此,我假设您的节点类如下所示

Class Node{
    private Node left;
    private Node right;
    //constructor, setters and getters and stuff
}
您可以将代码修改为如下所示:

if (head.getValue() > value){
    if(head.getLeft == null) {
        head.setLeft(new Node<Double>(value));
        return;
    }
    insertBST(head.getLeft(),value);
}
else{
    if(head.getRight == null) {
        head.setRight(new Node<Double>(value));
        return;
    }
    insertBST(head.getRight(),value);
}
if(head.getValue()>value){
if(head.getLeft==null){
head.setLeft(新节点(值));
返回;
}
insertBST(head.getLeft(),value);
}
否则{
if(head.getRight==null){
head.setRight(新节点(值));
返回;
}
insertBST(head.getRight(),value);
}

如果(head==null)
您还应删除此部分
,并始终确保您在函数开始时向第一次调用发送了有效的
节点
,如果您将新的
节点
添加到该函数之外您永远无法访问的部分

因此,我假设您的节点类如下所示

Class Node{
    private Node left;
    private Node right;
    //constructor, setters and getters and stuff
}
您可以将代码修改为如下所示:

if (head.getValue() > value){
    if(head.getLeft == null) {
        head.setLeft(new Node<Double>(value));
        return;
    }
    insertBST(head.getLeft(),value);
}
else{
    if(head.getRight == null) {
        head.setRight(new Node<Double>(value));
        return;
    }
    insertBST(head.getRight(),value);
}
if(head.getValue()>value){
if(head.getLeft==null){
head.setLeft(新节点(值));
返回;
}
insertBST(head.getLeft(),value);
}
否则{
if(head.getRight==null){
head.setRight(新节点(值));
返回;
}
insertBST(head.getRight(),value);
}

如果(head==null)
您还应删除此部分
,并始终确保您在函数开始时向第一次调用发送了有效的
节点
,如果您将新的
节点
添加到该函数之外您永远无法访问的部分

因此,我假设您的节点类如下所示

Class Node{
    private Node left;
    private Node right;
    //constructor, setters and getters and stuff
}
您可以将代码修改为如下所示:

if (head.getValue() > value){
    if(head.getLeft == null) {
        head.setLeft(new Node<Double>(value));
        return;
    }
    insertBST(head.getLeft(),value);
}
else{
    if(head.getRight == null) {
        head.setRight(new Node<Double>(value));
        return;
    }
    insertBST(head.getRight(),value);
}
if(head.getValue()>value){
if(head.getLeft==null){
head.setLeft(新节点(值));
返回;
}
insertBST(head.getLeft(),value);
}
否则{
if(head.getRight==null){
head.setRight(新节点(值));
返回;
}
insertBST(head.getRight(),value);
}

如果(head==null)
您还应删除此部分
,并始终确保您在函数开始时向第一次调用发送了有效的
节点
,如果您将新的
节点
添加到该函数之外您永远无法访问的部分

因此,我假设您的节点类如下所示

Class Node{
    private Node left;
    private Node right;
    //constructor, setters and getters and stuff
}
您可以将代码修改为如下所示:

if (head.getValue() > value){
    if(head.getLeft == null) {
        head.setLeft(new Node<Double>(value));
        return;
    }
    insertBST(head.getLeft(),value);
}
else{
    if(head.getRight == null) {
        head.setRight(new Node<Double>(value));
        return;
    }
    insertBST(head.getRight(),value);
}
if(head.getValue()>value){
if(head.getLeft==null){
head.setLeft(新节点(值));
返回;
}
insertBST(head.getLeft(),value);
}
否则{
if(head.getRight==null){
head.setRight(新节点(值));
返回;
}
insertBST(head.getRight(),value);
}

如果(head==null)
,则还应删除此部分
,并始终确保向第一个调用发送有效的
节点
,当重新分配传递的参数时,您只是更改局部变量,而不是传递给函数的值。您可以阅读这个问题以了解更多信息-这是Java,对吗?无论哪种方式,类似的论点都可能适用

这就是这行代码的问题:

head = new Node<Double>(value);

使用替代方法时,必须将根作为特殊情况处理。

当您重新分配传递的参数时,您只是更改局部变量,而不是传递给函数的值。您可以阅读这个问题以了解更多信息-这是Java,对吗?无论哪种方式,类似的论点都可能适用

这就是这行代码的问题:

head = new Node<Double>(value);

使用替代方法时,必须将根作为特殊情况处理。

当您重新分配传递的参数时,您只是更改局部变量,而不是传递给函数的值。您可以阅读这个问题以了解更多信息-这是Java,对吗?无论哪种方式,类似的论点都可能适用

这就是这行代码的问题:

head = new Node<Double>(value);

使用替代方法时,必须将根作为特殊情况处理。

当您重新分配传递的参数时,您只是更改局部变量,而不是传递给函数的值。您可以阅读这个问题以了解更多信息-这是Java,对吗?无论哪种方式,类似的论点都可能适用

这就是这行代码的问题:

head = new Node<Double>(value);


对于其他选项,根必须作为特例处理。

请将
addNode
代码添加到您的问题中,这样我可以帮助您一个明显的问题是,如果
head
null
,那么您只需将新的
节点
分配给本地
head
,在这个函数之外没有任何效果。@amdorra我改变了it@death7eater:我已经更新了我的答案,请检查并告诉我是否还有其他问题。请记住在问题中添加语言标记。这个问题非常特定于语言。请将
addNode
代码添加到您的问题中,这样我可以帮助您一个明显的问题是,如果
head
null
,那么您只会将新的
节点
分配给本地
head
,在这个函数之外没有任何效果。@amdorra我改变了it@death7eater:我已经更新了我的答案,请检查并告诉我是否还有其他问题。请记住在问题中添加语言标记。这个问题是