कार्यान्वयन का प्रयोग करें: अक्टूबर के लिए डेटा संरचना लैब व्यायाम / 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());
(...)
यह जानते हुए कि मैं वापसी प्रकार है और न ही विधि के मापदंडों को बदल नहीं सकते, मैं क्या इस अपवाद से बचने के लिए कर सकते हैं? मैं किसी भी तरह घटक प्रकार मिलता है और इसका इस्तेमाल करते हैं (कैसे करेंगे मैं यह नहीं?) खाली सरणी का दृष्टांत को कर सकते हैं?
मेरी कोड में सुधार करने के कोई सुझाव भी स्वागत है।













