-1

我已经设法使用递归正确添加节点。

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

我该如何解决这个问题?

这是(伪-ish)代码:

从设置类:

if(root.add(value))
    count++
    return true
return false

从节点类:

    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
    }

4

2 回答 2

2

返回递归调用返回的任何内容?

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
    }
}
}

顺便说一句,即使这是伪代码;如果是(afact)有点不正确?您正在检查左节点是否小于要添加的值,如果是,则将值添加到左节点...如果我没记错的话,您通常会在左侧添加较小的值,在右侧添加较高的值,因此您可能想要交换那个。(我假设你在代码中得到了这个正确的。)

于 2013-10-09T23:18:38.320 回答
0

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

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
}
于 2013-10-09T23:19:17.573 回答