2 回答
TA贡献1840条经验 获得超5个赞
更改insert(value)为current.insert(value)
要实现递归,您需要更改一个(或多个)参数,以便在一些递归调用后进入停止条件。
在您的代码中,您调用了insert属于同一对象的方法。而不是它的左/右子树。换句话说,递归永远不会结束,因为您没有访问子子树。
public class Tree {
private int data;
private Tree left;
private Tree right;
public Tree (int data) {
this.data=data;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Tree getLeft() {
return left;
}
public void setLeft(Tree left) {
this.left = left;
}
public Tree getRight() {
return right;
}
public void setRight(Tree right) {
this.right = right;
}
public void insert(int value) {
if (value < getData()) {
if (getLeft() == null) {
setLeft(new Tree(value));
} else {
getLeft().insert(value);
}
} else {
if (getRight() == null) {
setRight(new Tree(value));
} else {
getLeft().insert(value);
}
}
}
}
TA贡献1818条经验 获得超7个赞
您不需要current字段或root. 这是您的insert方法,大大简化了演示。
public class Tree {
final int data;
Tree left;
Tree right;
public Tree(int value) {
data = value;
}
public void insert(int value) {
if (value < data) {
if (left == null) {
left = new Tree(value);
} else {
left.insert(value);
}
} else {
if (right == null) {
right = new Tree(value);
} else {
right.insert(value);
}
}
}
}
添加回答
举报