द्विआधारी खोज वृक्ष के कश्मीर [] Preorder () विधि: सामान्य वापसी के बारे में

वोट
0

कार्यान्वयन का प्रयोग करें: अक्टूबर के लिए डेटा संरचना लैब व्यायाम / 28/2011 करने के लिए: लागू एक द्विआधारी खोज वृक्ष

समस्या: कश्मीर [] तरीकों से अग्रिम आदेश के) वापसी (, inorder () और क्रंमोत्तर ()

समस्या विवरण: BST केवल एक पैरामीटर के रूप में अपनी जड़ होना आवश्यक है। उल्लेख ऊपर तरीकों का पालन के रूप में हमारे प्रोफेसर द्वारा दिए गए एक अंतरफलक में वर्णित किया गया है:

    /**
    * Returns an array of keys filled according
    * to the pre-order traversing in a BST.  
    */      
    public K[] preOrder();      
    public K[] order();         
    public K[] postOrder();

मैं निम्नलिखित कोड के साथ सामान्य सरणी का दृष्टांत सकता है:

public K[] preOrder() {

    if (root == null) { return null; }

    ArrayList<K> list = new ArrayList<K>();
    preOrderRecursive(root,list);
    K[] toReturn = (K[]) Array.newInstance(this.getRoot().getKey().getClass(), list.size());

    for (int i = 0; i < list.size(); i++) {
        toReturn[i] = list.get(i);
    }

    return toReturn;
}

लेकिन, जब मैं विधि का परीक्षण भी हमारे प्रोफेसर द्वारा उपलब्ध कराए गए परीक्षण वर्ग का उपयोग कर, मैं एक NullPointerException मिला है, जो मुझे लगता है कि BST, है कि एक बार instantiated किया गया की जड़ तक बात कर रहा है, लेकिन परीक्षण में एक बिंदु पर हटा दिया गया है , और जब यह फिर से प्रणाली को बुलाती है, विधि रिटर्न अशक्त, नहीं एक खाली के रूप में परीक्षण से उम्मीद सरणी:

    (...)

    tree1 = new BSTImpl<Integer, Integer>();
    for (int i = 0; i < SIZE; i++) {
        tree1.insert(i, i);
    }
    tree1.remove(1);
    tree1.remove(2);
    tree1.remove(3);
    tree1.remove(4);
    assertArrayEquals(new Integer[]{},tree1.preOrder());

    (...)

यह जानते हुए कि मैं वापसी प्रकार है और न ही विधि के मापदंडों को बदल नहीं सकते, मैं क्या इस अपवाद से बचने के लिए कर सकते हैं? मैं किसी भी तरह घटक प्रकार मिलता है और इसका इस्तेमाल करते हैं (कैसे करेंगे मैं यह नहीं?) खाली सरणी का दृष्टांत को कर सकते हैं?

मेरी कोड में सुधार करने के कोई सुझाव भी स्वागत है।

30/10/2011 को 21:33
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
0

सवाल यह है: क्या तुम सच में है की जरूरत है एक पूर्णांक सरणी लौट आए? - मैं ऐसा नहीं सोचता।

मुझे लगता है assertArrayEquals()करता नहीं सरणियों के घटक प्रकार की जांच बल्कि केवल निहित मूल्यों तुलना करती है।

कोड आप से पता चला है के साथ, मैं कहेंगे कुछ और प्रकार विलोपन की वजह से संभव नहीं होगा।

तो एक वापसी करने की कोशिश Object[]या जो कुछ भी सुपर-प्रकार अपने मामले में लागू होता है:

return new Object[0];

तथा

return list.toArray();

(अनियंत्रित डाले आवश्यक है, लेकिन यह ठीक होना चाहिए)

संपादित करें:

ठीक है, तो <K extends Comparable>?
उस मामले उपयोग में:

return new Comparable[0];

तथा

return (Comparable[])list.toArray(new Comparable[]);

30/10/2011 को 22:00
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more