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

java二叉查找树插入递归似乎总是返回空根

朱慈
2023-03-14

嗨,我目前正在尝试使用一些在线参考构建 Java BST,但是我在插入过程中遇到了问题,因为我意识到在我尝试执行 inOrder 遍历后它不会创建树,经过几次尝试后,我发现在将根传递到我的插入方法时出现问题。

我的节点类:

public class TreeNode
{
    String m_key;
    Object m_value;
    TreeNode m_left;
    TreeNode m_right;
    
    //constructor
    public TreeNode(String inKey, Object inVal)
    {
        if(inKey==null)
        {
            throw new IllegalArgumentException("Key cannot be null.");
        }
        
        m_key = inKey;
        m_value = inVal;
        m_left = null;
        m_right = null;
    }
}

我的插入方法:

public void insert(String key, Object data)
{
    m_root = insertRec(m_root, key, data);
}

private TreeNode insertRec(TreeNode x, String key, Object val)
{
    if(x == null)
    { 
        x = new TreeNode(key,val);
    }
    
    int cmp = key.compareTo(x.m_key);
    if(cmp<0)
    {
        x.m_left = insertRec(x.m_left, key, val);
    }
    else if(cmp>0)
    {
        x.m_right = insertRec(x.m_right, key, val);
    }
    else
    {
        x.m_value = val;
    }
    
    return x;     
}

打印根目录:

public void printRoot()
{
    System.out.println("the root is: " + m_root.m_key);
}

我的主要班级:

public static void main(String[] args)
{
   binaryTree bt = new binaryTree();
   bt.insert("a", "data a");
   bt.insert("b", "data b");
   bt.insert("c", "data c");
   bt.printRoot();
}

我从打印根得到了“a”作为根结果,我尝试打印根。m_left显示为空。有什么我可能错过的吗?

共有1个答案

长孙翔
2023-03-14

第一个< code>if-statement之后的递归部分将始终被执行。此外,假设它是BST,如果< code>comp

if(x == null) { 
  x = new TreeNode(key,val);
} else {  
  int cmp = key.compareTo(x.m_key);
  if(cmp <= 0) {
    x.m_left = insertRec(x.m_left, key, val);
  } else {
    x.m_right = insertRec(x.m_right, key, val);
  }
}
return x;
 类似资料:
  • 我有一个<code>BinarySearchTree</code>,里面有Instance bankaccount的对象,这是我创建的一个类,所以基本上它只是一个二进制搜索树,我编写了一个方法,它将获取树并对其进行平衡,因为某些原因,它在平衡之前准确地打印出树: 现在,首先我有方法,它接受一个列表和一个并通过按顺序检查树数据来创建树数据的,因此它是一个排序数组。然后使用另一种方法以平衡的方式创建树

  • 我创造了这个二叉查找树。我使用循环和递归编写了两种形式的插入方法。递归代码虽然看起来是正确的,但并不工作,我想不出问题是什么。当我使用insertRecursion方法创建树时,leftChild和rightChild总是为null。 }

  • 我试图递归地在二叉树中找到最小值(不是二叉查找树)。让我困惑的是基本情况。如果TreeNode t为空,返回什么?因为我将使用返回的值将其与当前的最小值进行比较(我认为),我相信我返回的内容很重要。

  • 我试图用python写一个递归函数,给定一个二叉树,一个节点返回一个包含节点方向的字符串。我已经接近了,但是我的最终返回语句给了我路径和节点(我不需要节点)即LRLR4。 这是我到目前为止的代码: 有没有一种方法可以在不使用字符串输出末尾的节点的情况下实现这一点? 编辑:添加了所有实际代码,并且有问题的树包含每个节点的单个字母字符串。

  • 我有TreeNode类——非二叉树(

  • 几天来,我一直在使用二进制搜索树实现,我已经到了知道我的根正在通过使用我的“插入()”来填充的地步(当我使用Eclipse进行调试时,我可以看到这一点)。为什么我的其他节点不会被添加到树中? 这是我的BST课程: 这是我的Main(),最终我想在控制台中打印我的BST值,但首先我知道它们需要添加到树中: 公共类Main{