2017-03-01 70 views
1

我正在爲下週的cs期中考試而學習。我們收到了期中考試樣本,我想知道我是否正確地做了這個。鏈接列表和BST樹找到最低

  1. 編寫一個方法public T lowest(),返回類中最大的元素。

    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. 寫的方法公開牛逼最低()返回存儲的int樹中的最低值。

    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; 
} 
+0

對於Q2,你要找到樹或最低節點值樹上的葉子最低?無論如何,你做錯了。你的代碼將返回樹中最左邊葉的數據值。 –

+0

@JayeshDoolani我以爲最左邊的葉子總是有最低的值,所以這就是爲什麼我返回那個值 – bubbles2189

+0

啊,你是對的。我認爲這是一個普通的二叉樹,而不是BST。在這種情況下你的代碼將工作 –

回答

0
  1. 您的代碼在while循環中有一個錯誤:它會在一個無限循環去。如果發現某個節點的值小於當前最小值,則只會將指針向前推進。無論如何,你都必須繼續前進指針,並在條件滿足時更新min變量。該詭計循環應該是這樣的:

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

+0

謝謝我沒有抓住那個 – bubbles2189