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