Java BST 递归

标签 java recursion binary-search-tree

我最近从 C++ 转向了 Java,现在我正在研究 C++ 中需要使用指针的数据结构。

我现在正在 Java 中创建 BST,我使用递归插入到 Tree 中,但它没有像我预期的那样工作。此代码仅存储带有 val = 5Node。你能给我什么建议吗?

public class Main
{
    public static void main( String [] args )
    {
      BST<Integer> bst = new BST<Integer>();
      bst . add( 5 );
      bst . add( 10 );
    }
}

public class BST<T extends Number & Comparable<T>>
{
    private Node root;

    private class Node
    {
      private T val;
      private Node left;
      private Node right;

      Node(T val)
      {
        this . val = val;
        left = null;
        right = null;
      }
    }


    public BST()
    {
      root = null;
    }

    public BST( T val )
    {
      root = new Node( val );
    }

    public void add( T val )
    {
      if( root == null )
        root = new Node(val);
      else
        add( root, val );
    }

    private void add( Node parent, T val )
    {
      if( parent == null )
        parent = new Node(val);
      else if( val . compareTo( parent . val ) < 0 )
        add( parent . left, val );
      else if( val . compareTo( parent . val ) > 0 )
        add( parent . right, val );
    }
}

谢谢。

最佳答案

Java 是按引用传递的,因此执行 parent = new Node(val) 不会取得任何效果。您只是更改本地参数。

您需要执行类似 if ( left == null ) left = new Node(val) else add (left,val) 的操作。

不发布代码,因为这可能是一个家庭作业问题。

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

相关文章:

java - Arraylist 匹配并返回一个 boolean 结果

java - 使用 toString 逐行打印到文本文件

Haskell 使用 foldl 之类的递归

algorithm - 为什么 B-Tree 用于文件系统?

c++ - 将二叉树排序为排序数组

algorithm - 构建二叉搜索树和 AVL 树所需的时间复杂度之间的差异?

java - 从字符串中删除最后一个数字

java - Eclipse 中的 Struts 2 给出 "requested resource not found"

c - C 中计算可整除数字的递归函数

c - 递归删除重复字符