द्विआधारी खोज पेड़

वोट
5

यह कुछ कोड BST के बारे में विकिपीडिया पर पाया है:

# 'node' refers to the parent-node in this case
 def search_binary_tree(node, key):
     if node is None:
         return None  # key not found
     if key < node.key:
         return search_binary_tree(node.leftChild, key)
     elif key > node.key:
         return search_binary_tree(node.rightChild, key)
     else:  # key is equal to node key
         return node.value  # found key

अब यहाँ एक बाइनरी ट्री है:

       10
    5        12
  3   8    9   14
     4 11  

मैं 11 के लिए खोज कर रहा हूँ, और मैं वहाँ एल्गोरिथ्म का पालन करते हैं, तो मैं 10 के साथ शुरू, मैं 12 का अधिकार, और फिर 9. के लिए छोड़ दिया और मैं 11 की खोज के बिना पेड़ के अंत तक पहुँचते लेकिन 11 मेरी पेड़ में मौजूद है , यह सिर्फ दूसरी तरफ है।

आप कृपया इस एल्गोरिथ्म मेरी पेड़ पर काम करने के लिए एक बाइनरी ट्री में प्रतिबंध क्या हैं व्याख्या कर सकते हैं?

धन्यवाद।

07/09/2010 को 06:31
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


5 जवाब

वोट
3

बाइनरी ट्री और द्विआधारी खोज वृक्ष के बीच भ्रमित न हों। द्विआधारी खोज वृक्ष (संक्षेप में BST के रूप में कहा जाता है) द्विआधारी पेड़ की एक विशेष प्रकार का है, जहां बाईं तरफ के सभी नोड्स की तुलना में कम या माता पिता नोड के बराबर हैं और सभी नोड्स सही माता पिता नोड से अधिक कर रहे हैं।

उदाहरण आपके द्वारा दिए गए जबकि सिर्फ एक बाइनरी ट्री और नहीं एक द्विआधारी खोज वृक्ष है। आप देख सकते हैं कि मूल्य 11 और 14 माता पिता नोड 10 जो BST संपत्ति का उल्लंघन करता है के लिए छोड़ दिया जाता है। एक नजर डालें यहाँ द्विआधारी खोज के पेड़ के लिए।

07/09/2010 को 06:34
का स्रोत उपयोगकर्ता

वोट
1

आप गलत जगह पर नोड्स 14 और 11 रखा है। से BSTs पर विकिपीडिया लेख :

  • एक नोड के बाईं सबट्री नोड के प्रमुख की तुलना में कम कुंजी के साथ केवल नोड्स में शामिल है।
  • एक नोड के दाईं सबट्री नोड के प्रमुख से अधिक कुंजी के साथ केवल नोड्स में शामिल है।
  • दोनों बाएँ और दाएँ subtrees भी द्विआधारी खोज के पेड़ होना चाहिए।

आप देख सकते हैं, दोनों 14 और 11 8 से अधिक है।

07/09/2010 को 06:35
का स्रोत उपयोगकर्ता

वोट
3

पेड़ तुम नहीं एक BST में प्रस्तुत किया। 11 और 14 कभी नहीं 10 के बाईं ओर डाला जाएगा किया गया है, और यही कारण है एल्गोरिथ्म वहाँ खोज नहीं करता है। 9 जगह से बाहर भी है।

विकिपीडिया के अनुसार प्रविष्टि:

निवेशन एक खोज शुरू हो जाएगा के रूप में शुरू होता है; अगर जड़ मूल्य के बराबर नहीं है, हम बाएं या दाएं उपतरू के रूप में पहले खोज करते हैं। अंत में, हम एक बाहरी नोड तक पहुँचने और अपने दायाँ या बायाँ बच्चे के रूप में मूल्य जोड़ने, नोड के मूल्य के आधार पर होगा। दूसरे शब्दों में, हम जड़ की जांच करने और रिकर्सिवली छोड़ दिया सबट्री के लिए नए नोड सम्मिलित करता है, तो नया मान जड़, या सही सबट्री अगर नए मान से अधिक या जड़ के बराबर है से कम है।

आप बता सकते हैं कि एक बाइनरी ट्री एक BST है अगर यह इन गुणों (भी विकिपीडिया से) है:

  1. एक नोड के बाईं सबट्री नोड के प्रमुख की तुलना में कम कुंजी के साथ केवल नोड्स में शामिल है।
  2. एक नोड के दाईं सबट्री नोड के प्रमुख से अधिक कुंजी के साथ केवल नोड्स में शामिल है।
  3. दोनों बाएँ और दाएँ subtrees भी द्विआधारी खोज के पेड़ होना चाहिए।
07/09/2010 को 06:35
का स्रोत उपयोगकर्ता

वोट
10

यह सिर्फ इसलिए है क्योंकि आपका पेड़ एक द्विआधारी खोज वृक्ष नहीं है: यह सही ढंग से आदेश नहीं दिया गया है। BST वास्तव में एल्गोरिथ्म में वर्णित के रूप का निर्माण होता है। अपने पेड़ में उदाहरण के लिए: नोड '9' सही स्थिति में है क्योंकि के रूप में 9 <10 यह अपने रूट नोड '10' के बाईं शाखा के तहत होना चाहिए नहीं है। जो सही शाखा पर होना चाहिए '14' और '11' के लिए एक ही।

उदाहरण के लिए एक BST इस तरह sth सकता है:

    10
  5    11
3   8    12
          14
07/09/2010 को 06:37
का स्रोत उपयोगकर्ता

वोट
1

अपने पेड़ एक द्विआधारी खोज वृक्ष नहीं है

07/09/2010 को 06:58
का स्रोत उपयोगकर्ता

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