【问题标题】:How to find smallest value in a binary search tree?如何在二叉搜索树中找到最小值?
【发布时间】:2016-03-28 10:16:34
【问题描述】:

我必须编写一个客户端方法,使用给定的代码返回对二叉搜索树中具有最小值的节点中信息的引用。

这里是ZIP FILE

我必须使用这个方法签名:

Golfer min(BinarySearchTree 树)

这是我写的:

   Golfer min(BinarySearchTree<Golfer> tree)
   {
      int treeSize = tree.reset(BinarySearchTree.INORDER);
      int numNodes = 0;
      for(int count = 1; count <= treeSize; count++)
      {
         if((tree.getNext(BinarySearchTree.INORDER).compareTo(maxValue)) <= 0)
            numNodes = numNodes + 1;
      }
      return numNodes;     
   }

【问题讨论】:

  • 最小值还是最小键?
  • 你有一个标记为 min 的函数,但是你返回了一个叫做 numNodes 的东西.....有一个提示。
  • @SashaSalauyou 我仔细检查了一下,它指出了问题中的最小值。

标签: java binary-search-tree


【解决方案1】:

我猜您正在寻找得分最低的高尔夫球手

方法 1:O(lg(n)) 时间,因为它沿着树的左侧向下运行

public Golfer min(BinarySearchTree<Golfer> tree) {
    BSTNode<Golfer> node = tree.root;
    if (node == null) {
        return null;
    }
    while (node.getLeft() != null) {
        node = node.getLeft();
    }
    return node.getInfo();
}


方法2:O(n)时间,因为它遍历树中的所有元素以创建顺序遍历

public Golfer min2(BinarySearchTree<Golfer> tree) {
    int treeSize = tree.reset(BinarySearchTree.INORDER);
    if (treeSize <= 0) {
        return null;
    }
    return tree.getNext(BinarySearchTree.INORDER);
}

这里有一些代码来测试上面的代码

public static void main(String[] args) {
    BinarySearchTree<Golfer> bst = new BinarySearchTree<Golfer>();
    bst.add(new Golfer("A", 10));
    bst.add(new Golfer("B", 12));
    bst.add(new Golfer("C", 8));
    bst.add(new Golfer("D", 9));
    bst.add(new Golfer("E", 3));

    Golfer min = new Test().min(bst);
    //Golfer min = new Test().min2(bst);
    if (min != null) {
        System.out.println("min name: " + min.name + ", min score: " + min.score);
    } else {
        System.out.println("Empty tree");
    }
}

输出:

min name: E, min score: 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多