当前位置: 首页 > 知识库问答 >
问题:

从整数串构造一个二叉查找树

齐坚成
2023-03-14

在包含 main 函数的类中,定义一个函数调用 createTree(String strKey)。给出一个整数字符串(用空格字符分隔),此函数将创建一个 BST 树,其中整数键跟在输入字符串之后。示例:给定一个字符串 s = “30 20 40”。调用函数 createTree(s) 来创建二叉搜索树:root = 30,root.left = 20,root.right = 40。以下是我的代码:

  • 节点.java
public class Node {
    Integer key;
    Node left, right;
    
    public Node(Integer key){
        this.key = key;
        this.left = this.right = null;
    }
}
  • 英国夏令时.java
public class BST {
    
    private Node root;
    
    public BST(){
        this.root = null;
    }
    
    public Node getRoot(){
        return this.root;
    }

    public Node insert(Node x, Integer key){
        if (x == null){
            return new Node(key);
        }
        int cmp = key.compareTo(x.key);
        if (cmp < 0){
            x.left = insert(x.left,key);
        }
        else if (cmp > 0){
            x.right = insert(x.right,key);
        }
        else {
            x.key = key;
        }
        return x;
    }
}
    < li>Test.java
public class Test {
    
    public static BST createTree(String strKey){
        String[] spl = strKey.split(" ");
        BST tree = new BST();
        Node root = null;
        for (int i=0; i<spl.length; i++){
            Integer key = Integer.parseInt(spl[i]);
            tree.insert(root,key);
        }
        return tree;
    }
    
    public static void main(String[] args){
        String s = "20 30 40";
        BST tree = createTree(s);
        System.out.println(tree.getRoot());
    }
}

结果也是空的(根为空),我不知道为什么键没有插入到树中。希望你们能帮我解决这个问题。谢谢

共有1个答案

谷出野
2023-03-14
if (x == null){
    return new Node(key);
}

返回的节点未分配给BST类中的根。此外,您在createTree方法中有根。

您可以将其更改为包含重载的插入函数,该函数仅接受要插入的整数并将现有整数设为私有。

private Node insert(Node x, Integer key){
    //your existing code
}

public void insert(Integer key) {
    this.root = insert(this.root, key);
}

有了这个,根将在第一次创建时更新。

createTree调用一个参数insert方法

public static BST createTree(String strKey) {
    String[] spl = strKey.split(" ");
    BST tree = new BST();
    for (int i = 0; i < spl.length; i++) {
        Integer key = Integer.parseInt(spl[i]);
        tree.insert(key);
    }
    return tree;
}
 类似资料:
  • 接受的答案可以做一棵完美的树(这也是一棵完整的树)。虽然它不能在没有完美的情况下做成一棵完整的树。不过,这是我的要求最接近的答案。为了在不完美的情况下进行竞争,你可以去掉树最右边的叶子。 1.问题: 试图将< code >二叉查找树变成< code >完整的二叉查找树。我可以找到很多< code >完全二叉树的代码示例,但是没有< code >完全二叉查找树。这个插件的工作就像二叉查找树应该做的那

  • 我需要制作一。如果我有一个看起来像这样的方法: 例如,我用数字9作为< code>i的值,我该怎么做才能找到一个根来生成一棵完整的树呢? 如果我使用9作为值,则数字将为。对于完整的二叉搜索树,根必须为 6,如下所示: 我怎样才能制作一个知道这一点的方法?它应该适用于任何类型的数字,所以如果我想使用数字14,它应该能够。 到目前为止,我唯一拥有的代码是一个插入方法,它只是检查要插入的数字是大于(向右

  • 我正在研究一个算法问题。给定n,生成存储值1的所有结构唯一的二进制搜索树。。。n、 解决方案是枚举序列中的每个数字i,并使用该数字作为根,其左侧的子序列1…(i-1)将位于根的左分支上,类似地,右侧的子序列(i 1)…n位于根的右分支上。然后从子序列递归地构造子树。这种方法确保构建的BST都是唯一的,因为它们有唯一的根。 现在我的问题是:如果树不限于二叉搜索树,如果它可以是任何二叉树,该怎么办。解

  • 问题内容: 我正在构造一个二叉树。让我知道这是否是正确的方法。如果没有,请告诉我怎么做?我在构建通用二进制树的代码已找到的地方找不到合适的链接。BST的每个地方都已编码。 这是我要制作的二叉树。我应该能够进行所有的树遍历。 问题答案: 我认为这是您要寻找的:

  • 我试图创建一个莫尔斯编码器-解码器,我必须使用二进制搜索树(而不是数组)。下面的部分假定获取一个字符数组(我们之前从一个文本文件创建了这个数组),并基于它创建一个搜索树。 在btree|u基本字符数组中,我们有以下格式的数据:“(字母)(摩尔斯电码)|(字母)(摩尔斯电码)|”等(例如e.| t-| z-|…)。 注意:字符串包含数据的方式是,通过从头到尾读取数据,将创建一个平衡的搜索树 二叉树的

  • 我正在努力实现二叉搜索树。完成实现所需的功能之一是重新平衡功能。 根据规范,该功能的工作方式如下: rebalance() 方法应创建一个平衡树,从而将偏度降低为零。平衡树是指在整个树中,左子树和右子树的大小相差不超过1(即,每个子树也是平衡的)。 为了平衡树,rebalance() 方法应反复将根值移动到较小的子树,并将最小/最大值从较大的子树移动到根,直到树平衡。然后,它应该以递归方式平衡两个