【问题标题】:Linked List and BST Trees find the lowest链表和 BST 树找到最低的
【发布时间】:2017-03-01 14:50:58
【问题描述】:

我正在准备下周的 CS 期中考试。我们收到了一份期中考试样本,我想知道我这样做是否正确。

  1. 编写一个方法 public T lower() 返回类中最大的元素。

    public class List<T extends Comparable<T>>
    { 
         private Node<T> head;
         // some methods here
         private class Node<T>
         {
             T data;
             Node<T> next;
         }
    }
    

    这是我的答案:

    public T lowest()
    {
       if(head == null)
           return null; 
    
    Node<T> pointer = head;
    T min = pointer.data;
    
    while(pointer != null)
    {
        if(pointer.data.compareTo(min) < 0) // 
        {
            min = pointer.data;
            pointer = pointer.next;
        }
    }
    return min;
    

    }

  2. 编写一个方法 public T lower() 返回存储在树中的最小值。

     public class BST<T extends Comparable<T>>
     {
        private Node<T> root;
        // some methods here
        private class Node<T>
        {
             T data;
             Node<T> left, right;
        }
    }
    

这是我的答案:

public T lowest()
{
    Node current = root;
    while(current.left != null)
    {
        current = current.left;
    }
    return current.data;
}

【问题讨论】:

  • 对于Q2,你想找到树中最低的节点值还是树中最低的叶子?无论如何,你做错了。您的代码将返回树中最左侧叶子的数据值。
  • @JayeshDoolani 我认为最左边的叶子总是具有最低值,所以这就是我返回该值的原因
  • 啊,你说得对。我认为这是一个通用的二叉树而不是 BST。在这种情况下,您的代码将起作用

标签: java


【解决方案1】:
  1. 您的代码在 while 循环中有一个错误,它将进入无限循环。如果它发现一个节点的值小于当前最小值,您只会将指针向前推进。无论如何,您都必须继续推进指针,并在满足您的条件时更新 min 变量。 wile循环应该是这样的:

    while(pointer != null) { if(pointer.data.compareTo(min) < 0) { min = pointer.data; } pointer = pointer.next; }

【讨论】:

  • 谢谢你我没听懂
猜你喜欢
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多