मेरे पास एक बीएसटी है जिसमें डुप्लिकेट प्रविष्टियां हैं। मैं डुप्लिकेट प्रविष्टियों को खोजने की कोशिश कर रहा हूं। अब जाहिर है कि मैं एक गूंगा एल्गोरिदम लिख सकता हूं जो पूरे पेड़ को पार करता है, जो आसान है।बाइनरी खोज पेड़ में डुप्लिकेट प्रविष्टियों को खोजने की रणनीति
हालांकि, मैं एक और अधिक कुशल लिखना चाहता हूं। यहां मैंने जो किया है/मैंने अभी तक सोचा है:
निम्न पेड़ मानें।
10
/ \
5 15
/\ /\
2 8 10 16
\ \
8 12
अगर मैं अगर यह कोई अधिकार नहीं बच्चा है डुप्लिकेट खोजने के लिए, सभी 8 की, मैं पहले से 10 के बाईं सबट्री पर 8 मिलेगा खोजना चाहते हैं, यह होने जा रहा है सबसे बाईं ओर उस नोड (8) से बड़े पहले माता-पिता के दाएं-उप-भाग पर नोड? और अगर उसके पास सही बच्चा होता है, तो यह या तो अपने दाएं उपट्री के बाएं सबसे नोड में या बाएं उपट्री पर सबसे अधिक नोड सही हो सकता है?
क्या वे सभी मामले हैं, जिन्हें लूप और if-statement के समूह के साथ हासिल किया जा सकता है?
यदि नहीं, तो बेहतर दृष्टिकोण क्या है? क्या कोई मदद कर सकता है?
धन्यवाद
संपादित करें: असल में मैं सिर्फ महसूस किया कि यह "सबसे नोड छोड़ दिया" या "सही सबसे नोड" नहीं हो सकता। वह नोड पाएगा जो अगले उच्चतम मूल्य या पिछले सबसे कम मूल्य है। क्या यह पहले एक नोड होगा?
संपादित करें 2:
फिक्स्ड मेरी BST उदाहरण। यह निम्न प्रविष्टि विधि इस प्रकार है:
if (node == null)
return new NodeBST<Value>(name, value);
if (node.key().compareTo(name) > 0)
node.setLeft(insert(node.left(), name, value));
else
node.setRight(insert(node.right(), name, value));
इसका मतलब यह है डुप्लिकेट उनके डुप्लिकेट के अधिकार के लिए जोड़ दिया जाएगा .. है ना?
तुम्हें पता है पहले से क्या नंबर आप के लिए देख रहे हैं की एक सरणी वापसी? – lynks
क्या यह बीएसटी के उद्देश्य को हराने में नहीं आता है? – Jasoneer
यह उचित बीएसटी नहीं है। आपके पास रूट 10 की दाहिनी शाखा पर 8 नहीं हो सकते हैं। –