在包含 main 函数的类中,定义一个函数调用 createTree(String strKey)。给出一个整数字符串(用空格字符分隔),此函数将创建一个 BST 树,其中整数键跟在输入字符串之后。示例:给定一个字符串 s = “30 20 40”。调用函数 createTree(s) 来创建二叉搜索树:root = 30,root.left = 20,root.right = 40。以下是我的代码:
public class Node {
Integer key;
Node left, right;
public Node(Integer key){
this.key = key;
this.left = this.right = null;
}
}
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;
}
}
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());
}
}
结果也是空的(根为空),我不知道为什么键没有插入到树中。希望你们能帮我解决这个问题。谢谢
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() 方法应反复将根值移动到较小的子树,并将最小/最大值从较大的子树移动到根,直到树平衡。然后,它应该以递归方式平衡两个