【问题标题】:Binary search tree recursion does not work二叉搜索树递归不起作用
【发布时间】:2020-09-29 04:03:51
【问题描述】:

我创建了这个二叉搜索树。我使用循环和递归以两种形式编写了插入方法。递归代码虽然看起来正确但不起作用,我无法弄清楚问题是什么。当我使用 insertRecursion 方法创建树时,leftChild 和 rightChild 始终为空。

public class BinarySearchTree {
private class Node{
    private int value;
    private Node leftChild;
    private Node rightChild;
    public Node(int value){
        this.value=value;
    }
    public String toString(){
        return ""+this.value;
    }
}
private Node root;
public BinarySearchTree(int value){
    root=new Node(value);
}
public void insertRecursion(int value){
    Node current=root;
    insertRecursionForm(current,value);
}
private Node insertRecursionForm(Node root, int value){
    if(root==null){
        root=new Node(value);
        return root;
    }
    if(value<root.value){
        return insertRecursionForm(root.leftChild,value);
    }else{
        return insertRecursionForm(root.rightChild,value);
    }
}

public void insert(int value){
    Node current=root;
    while(true) {
        if (value < current.value) {
            if (current.leftChild == null) {
                current.leftChild= new Node(value);
                break;
            }else{
                current=current.leftChild;
            }
        }else if(value>current.value) {
            if (current.rightChild == null) {
                current.rightChild= new Node(value);
                break;
            }else{
                current=current.rightChild;
            }
        }
    }
}

}

【问题讨论】:

  • 您不需要单独的 Node 类。树的每个节点都是一个BInarySearchTree。试一试,一切都会变得清晰。

标签: java recursion binary-search-tree


【解决方案1】:

试试这样:

private Node insertRecursionForm(Node root, int value){
    if(root==null){
        root=new Node(value);
        return root;
    }
    if(value<root.value)
    {
        root.leftChild = insertRecursionForm(root.leftChild,value);
    }else
    {
        root.rightChild = insertRecursionForm(root.rightChild,value);
    }
    return root;
}

您之前的代码的问题是您只返回了最后插入的节点的值。这就是为什么你总是让左右节点为空。

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 2014-01-02
    • 2013-04-14
    • 2021-07-03
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多