java - Java中的BST递归实现

标签 java recursion

我不知道为什么我需要再次分配node.left = insert(node.left, data),因为我已经使用node = new BNode(data)分配了它.

private BNode insert(BNode node, int data) { 
    if (node == null) { 
       node = new BNode(data); 
    } 
   else if (node.data < data) { 
        node.left = insert(node.left, data); 
    } 
   else if (node.data > data) { 
        node.right = insert(node.right, data); 
    } 
    return node; 
}

最佳答案

在二叉搜索树中,您必须将任何新元素作为叶子放置。您的代码首先检查我们当前是否正在查看节点,如果是,则在此处插入我们的数据。否则,我们需要继续沿着 Twig 向下移动,直到到达叶子。因此,我们在左分支或右分支上调用此函数(取决于节点中的数量和数据)。我们的方法是调用node.left 或node.right 上的函数。如果子节点为空,那么我们想说现在我们的子节点就是我们刚刚插入的新节点。

如果子节点不是叶子,则通过返回原始子节点,此分配将不会执行任何操作。它只是通过说来做某事

node = new BNode(data);

因此,上一次调用此方法将是唯一将其左子或右子更改为当前新叶子的时间,而所有其他左子和右子都保持原样。

关于java - Java中的BST递归实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36122094/

相关文章:

java - 使用 Eclipse 中的处理制作不同的屏幕

java - Java中的接口(interface)是什么?

Java,JCheckbox - 消耗/阻止所有事件,但仍然启用

c - 行列式程序无法正常工作

Java 选择递归函数

c - 为什么这个递归函数返回正确的值?

java - 如何解析 XML 字符串并检索元素的字符索引?

haskell - 使用 cabal 管理两个相互依赖的库

c - 从完全二叉树中删除最后一个节点

java - 如何打印Java数组?