Java 添加到二叉搜索树,返回布尔值

Java 添加到二叉搜索树,返回布尔值,java,Java,我已经成功地使用递归正确地添加了节点 我在尝试保持计数时遇到问题,我的递归方法在添加节点之前返回false(多次)。看起来它可以在不返回false的情况下工作,但是java不喜欢这样 我该怎么做 以下是(psuedo ish)代码: 从集合类: 从节点类: public boolean add(项值){ if(this==value)//检查它是否已经存在 返回false; }否则{ if(this.left值) 如果(this.right!=null) 这个。对。添加(值) 其他的 th

我已经成功地使用递归正确地添加了节点

我在尝试保持计数时遇到问题,我的递归方法在添加节点之前返回false(多次)。看起来它可以在不返回false的情况下工作,但是java不喜欢这样

我该怎么做

以下是(psuedo ish)代码:

从集合类:

从节点类:

public boolean add(项值){
if(this==value)//检查它是否已经存在
返回false;
}否则{
if(this.left<值)
if(this.left!=null)
this.left.add(值)
其他的
this.left=新节点(值)
返回真值
if(this.right>值)
如果(this.right!=null)
这个。对。添加(值)
其他的
this.right=新节点(值)
返回真值
}
返回错误
}

返回递归调用返回的内容

public boolean add(item value) {
if(this == value) {
    return false
} else if(this.left < value) {
    if(this.left != null) {
        return this.left.add(value)
    } else {
        this.left = new Node(value)
        return true
    }
} else { //if(this.right > value)
    if(this.right != null) {
        return this.right.add(value)
    } else {
        this.right = new Node(value)
        return true
    }
}
}
public boolean add(项值){
if(this==值){
返回错误
}else if(this.left<值){
if(this.left!=null){
返回此.left.add(值)
}否则{
this.left=新节点(值)
返回真值
}
}else{//if(this.right>值)
如果(this.right!=null){
返回此。右。添加(值)
}否则{
this.right=新节点(值)
返回真值
}
}
}

顺便说一句,即使这是伪代码;如果(afaict)有点不正确?您正在检查左节点是否小于要添加的值,如果是,您正在将值添加到左节点。。。如果我没弄错的话,你通常会在左边加上较小的值,在右边加上较大的值,所以你可能想交换它。(我假设您的代码是正确的。)

首先,您确定问题不是因为格式错误吗?由于您的代码,这是正确的格式化。如您所见,如果(this.right>值)从未达到,

public boolean add(item value) {
    if (this == value) {  //check if it already exists
        return false;
    } else {
        if (this.left < value) {
            if (this.left != null) {
                this.left.add(value);

            } else {
                this.left = new Node(value);
            }
        }
        return true;
        if (this.right > value) {
            if (this.right != null) {
                this.right.add(value);

            } else {
                this.right = new Node(value);
            }
        }
        return true
    }
    return false
}
public boolean add(项值){
如果(this==value){//检查它是否已经存在
返回false;
}否则{
if(this.left<值){
if(this.left!=null){
这个。左。增加(值);
}否则{
this.left=新节点(值);
}
}
返回true;
if(this.right>值){
如果(this.right!=null){
这个.对.增加(价值),;
}否则{
this.right=新节点(值);
}
}
返回真值
}
返回错误
}

伪ish代码有一些基本语法问题,我假设这些问题在代码中得到了纠正。我不明白的是你为什么在最后返回false。这意味着在拉取函数调用堆栈时,它必须返回多个false。它要求在末尾返回false,因为您的方法具有返回类型。也就是说,你有可能在没有返回的情况下完成你的方法。@ND_27我相信这就是他的问题所在。
public boolean add(item value) {
if(this == value) {
    return false
} else if(this.left < value) {
    if(this.left != null) {
        return this.left.add(value)
    } else {
        this.left = new Node(value)
        return true
    }
} else { //if(this.right > value)
    if(this.right != null) {
        return this.right.add(value)
    } else {
        this.right = new Node(value)
        return true
    }
}
}
public boolean add(item value) {
    if (this == value) {  //check if it already exists
        return false;
    } else {
        if (this.left < value) {
            if (this.left != null) {
                this.left.add(value);

            } else {
                this.left = new Node(value);
            }
        }
        return true;
        if (this.right > value) {
            if (this.right != null) {
                this.right.add(value);

            } else {
                this.right = new Node(value);
            }
        }
        return true
    }
    return false
}