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