मैं बाइनरी सर्च ट्री से नोड को हटाने के लिए एक विधि लिखने की कोशिश कर रहा हूं। नोड को हटाने के लिए मेरी विधि यहां दी गई है।जावा: किसी विधि के भीतर ऑब्जेक्ट को शून्य पर सेट करने का कोई प्रभाव नहीं है (कोड का उपयोग कर रहा है)
public void delete(int deletionNodeValue) {
Node<Integer> nodeToBeDeleted = getNode(deletionNodeValue);
if(nodeToBeDeleted == null) return; // No node with such value exists throw an error
if(isLeafNode(nodeToBeDeleted)) {
nodeToBeDeleted = null;
} else if (nodeToBeDeleted.getNumChildren() == 1) {
bypassNode(nodeToBeDeleted);
}else {
replace(nodeToBeDeleted, getSuccessor(nodeToBeDeleted.getValue()));
}
}
मैं एक पत्ता नोड पर इस विधि की जाँच की है, हालांकि डिबगिंग के बाद मुझे पता चला कि nodeToBeSelected=null
के निष्पादन होता है, नोड वास्तव में हटाया नहीं गया है। चूंकि मैं अभी भी हटाए गए मूल्य की खोज कर सकता हूं और प्रोग्राम अभी भी इसे लाने के लिए प्रबंधित करता है।
tree.add(5);
tree.delete(5);
System.out.println(tree.getNode(5).getValue()); // Output : 5, should've been deleted
यहाँ है मेरी getNode() विधि
public Node<Integer> getNode(int searchValue) {
Node<Integer> currentNode = root;
while(currentNode != null) {
int currentNodeValue = currentNode.getValue();
if(searchValue == currentNodeValue)
return currentNode;
else if(searchValue < currentNodeValue)
currentNode = currentNode.getLeftChild();
else
currentNode = currentNode.getRightChild();
}
// if no node with given value is found
return null;
}
getNode() विधि मूल्य द्वारा पाया नोड लौट रहा है? मैं इसे संदर्भ वापस कैसे कर सकता हूं और सीधे नोड में हेरफेर कर सकता हूं?
कुछ शामिल करना चाहिए @NashVali मुझे नहीं लगता कि आप 'public' क्षेत्रों के रूप में' परिभाषित करने दिया जाना चाहिए leftNode' और 'rightNode' है ।सेटर्स का उपयोग करना एक बेहतर विकल्प है। – CKing
हां उन्हें सार्वजनिक नहीं होना चाहिए। यह कोड एक काल्पनिक विधि 'void deleteChild (नोड नोडToBeDeleted)' विधि का एक स्निपेट है। – CoronA
काल्पनिक विधि अभी भी काल्पनिक सार्वजनिक क्षेत्रों का उपयोग करने के बजाय काल्पनिक सेटर्स का उपयोग कर सकती है। मेरा जवाब देखें – CKing