java 中的带有 getter 和 setter 的二叉树
Binary tree in java with getters and setters
我正在尝试按照示例 1 创建二叉树,其中树是在没有 getter 和 setter 的情况下创建的。我想用 geeters 和 setters 创建它,但我坚持使用递归。如何调用递归函数with/inside setter?这是代码..
p.s。树 class pastebin
public class TreeF {
Tree root;
public void insert(int value) {
if (root==null) {
root = new Tree(value);
return;
}
Tree current = root;
if (value < current.getData() ) {
if (current.getLeft()==null) {
current.setLeft(new Tree (value));
}else {
// call insert method inside current.left object [currrent.left(insert(value))]
current=current.getLeft();
insert (value);
}
}
else {
if (current.getRight()==null) {
current.setRight(new Tree (value));
}else {
current=current.getRight();
insert (value);
}
}
}
}
将insert(value)
更改为current.insert(value)
要实现递归,需要改变一个(或多个)参数,以便在一些递归调用后可以进入停止条件。
在您的代码中,您调用了属于同一对象的方法 insert
。而不是它的 left/right 子树。换句话说,递归永远不会结束,因为你不访问子树。
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);
}
}
}
}
您不需要 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);
}
}
}
}
我正在尝试按照示例 1 创建二叉树,其中树是在没有 getter 和 setter 的情况下创建的。我想用 geeters 和 setters 创建它,但我坚持使用递归。如何调用递归函数with/inside setter?这是代码.. p.s。树 class pastebin
public class TreeF {
Tree root;
public void insert(int value) {
if (root==null) {
root = new Tree(value);
return;
}
Tree current = root;
if (value < current.getData() ) {
if (current.getLeft()==null) {
current.setLeft(new Tree (value));
}else {
// call insert method inside current.left object [currrent.left(insert(value))]
current=current.getLeft();
insert (value);
}
}
else {
if (current.getRight()==null) {
current.setRight(new Tree (value));
}else {
current=current.getRight();
insert (value);
}
}
}
}
将insert(value)
更改为current.insert(value)
要实现递归,需要改变一个(或多个)参数,以便在一些递归调用后可以进入停止条件。
在您的代码中,您调用了属于同一对象的方法 insert
。而不是它的 left/right 子树。换句话说,递归永远不会结束,因为你不访问子树。
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);
}
}
}
}
您不需要 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);
}
}
}
}