2012-03-18 76 views
1

我完全不熟悉BST,以及它們如何工作,如果這是完全錯誤的,將不勝感激,如果我可以獲得鏈接到參考網站或其他東西。現在我正在編寫一個程序,將ArrayListString s的值添加到BST中,並且我提出了諸如以下錯誤:compareTo(Node)的方法未定義爲ArrayList<String>類型。我認爲有extends Comparable它會考慮比較ArrayList值,但我不使用E。此外,我不得不添加一個演員來設置它爲根,但我覺得有一個更簡單的方法。我不知道我是否可以按照我所做的方式添加ArrayList值,這只是它在我用作參考的書中的外觀。這是我的代碼,任何幫助,將不勝感激,我已經嘗試過Java API中查找的東西,並沒有幫助:將對象添加到二叉搜索樹

public class BinarySearchTree<E extends Comparable<? super E>> 

{ 

    public void add(ArrayList<String> s, Node n) { 


      if (n == null) 
       n = (Node) s; 
      else if (s.compareTo(n) < 0) 
       add(s, n.leftChild); 
      else 
       add(s, n.rightChild); 


    } 
} 
+0

究竟是「加()」嗎?好像你正在嘗試將ArrayList添加到BST中,而不是將值FROM和ArrayList添加到BST中 – mfrankli 2012-03-18 18:25:30

回答

0

它看起來像你正試圖將整個ArrayList中添加爲一個節點你的BST。我的猜測是你應該從ArrayList的元素構建一個BST。爲此,我建議定義兩個函數:

public Node add(ArrayList<String> s, Node root) { 
    for (String elt : s) { 
     root = add(elt, root); 
    } 
} 

public Node add(String elt, Node root) { 
    if (root == null) { 
     root = // new Node with data set to elt 
    } else if (elt.compareTo(n.data()) < 0) { 
     root.left = add(elt, root.left); 
    } else if (elt.compareTo(n.data()) > 0) { 
     root.right = add(elt, root.right); 
    } else { 
     // duplicate element being inserted -- error? 
    } 
    return root; 
} 
+0

是的,我必須將ArrayList中的每個元素添加到BST中。感謝您的幫助!一個問題,但是,你是什麼意思由n.data()。我應該將n設置爲ArrayList中的每個值嗎? – 2012-03-18 18:44:22

1

首先,Node類應該擴展Comparable並覆蓋其中的compareTo方法。 ArrayList類不延伸可比,因此以下將不工作

s.compareTo(n)的0 <

S是一個ArrayList參考。此外,您正嘗試將ArrayList引用與完全不正確的節點引用進行比較。您需要比較兩個節點值。