बाइनरी ट्री और बाइनरी सर्च ट्री में अंतर


जवाबों:


566

बाइनरी ट्री: ट्री जहां प्रत्येक नोड में दो पत्ते होते हैं

  1
 / \
2   3

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

  2
 / \
1   3

14
@ गेटे: यह एक वैचारिक बात है, आप वास्तव में कभी भी एक ऐसा नहीं बना सकते जो पूरी तरह से असंवैधानिक हो। हालांकि, बहुत सारे गैर-खोज बाइनरी पेड़ हैं जो किसी अन्य तरीके से विशेष हैं, जैसे बाइनरी ढेर।
user541686

19
@ बपतिस्मा देने वाले पेड़ों में तुलनीय डेटा होना आवश्यक नहीं है, कई (गैर खोज) द्विआधारी पेड़ों का उपयोग बीजगणितीय अभिव्यक्ति को पार्स करने के लिए किया जाता है, बाइनरी ट्री सही है एक ऑपरेटर को नोड (s और संख्यात्मक मान के रूप में रखकर) एक infix नोटेशन पार्सर लिखता है।
लीफ्स के

2
@JBoy: वे उस मामले में बाइनरी पेड़ नहीं होने जा रहे हैं। (उदाहरण के लिए एकरी संचालकों के दो बच्चे नहीं हो सकते।) मैं वास्तव में असंबंधित बाइनरी पेड़ों के लिए एक व्यावहारिक उपयोग के मामले के बारे में नहीं सोच सकता, इसलिए मैंने यह टिप्पणी की है।
user541686

2
महान और सरल। दृश्य उदाहरण के लिए +1 :)
आंद्रेई कोन्स्टेंटिनोव

@ मेहरदाद एक बाइनरी ट्री में प्रति नोड एक या दो बच्चे होते हैं। अभिव्यक्ति के पेड़ एक आदर्श उदाहरण हैं। एक द्विआधारी खोज वृक्ष भी जब तक यह पूरा होने के लिए है, जो केवल तत्वों में से कुछ संख्या के साथ भी हो सकता है होता है, प्रति नोड एक या दो बच्चे हैं।
लोर्ने

56

बाइनरी ट्री दो बच्चों (बाएं बच्चे और दाएं बच्चे) के साथ पेड़ का एक विशेष रूप है। यह केवल ट्री संरचना में डेटा का प्रतिनिधित्व है

बाइनरी सर्च ट्री (BST) एक विशेष प्रकार का बाइनरी ट्री है जो निम्न स्थिति का अनुसरण करता है:

  1. बायाँ बच्चा नोड अपने मूल नोड से छोटा है
  2. सही बच्चे का नोड उसके मूल नोड से अधिक है

23
ये स्थितियाँ पर्याप्त नहीं हैं। पूरे बाएँ उप-प्रकार में केवल माता-पिता की तुलना में कोई कुंजी नहीं होनी चाहिए, और पूरे दाएँ उप-वर्ग में अधिक नोड्स होने चाहिए।
लोर्ने

1
@EJP क्या आप कृपया अपनी टिप्पणी विस्तृत कर सकते हैं? क्या आप पूरे उपशीर्षक का मतलब है? आपका मतलब है कि सबट्री के सभी मूल्य बाईं ओर जड़ से कम होने चाहिए? और सभी मान दाईं ओर मूल मान से अधिक होने चाहिए?
आसिफ मुश्ताक

दूसरे लिंक के बाद, "सत्यापन" पर अनुभाग पढ़ें और यह स्पष्ट होगा।
रोब

38

एक बाइनरी ट्री नोड्स से बना है, जहां प्रत्येक नोड में एक "बाएं" पॉइंटर, एक "राइट" पॉइंटर और एक डेटा तत्व है। "रूट" पॉइंटर पेड़ में सबसे ऊपरी नोड की ओर इशारा करता है। बाएँ और दाएँ पॉइंटर्स पुनरावर्ती रूप से छोटे "सबट्रीज़" की ओर इंगित करते हैं। एक शून्य सूचक एक द्विआधारी वृक्ष का प्रतिनिधित्व करता है जिसमें कोई तत्व नहीं है - खाली पेड़। औपचारिक पुनरावर्ती परिभाषा है: एक द्विआधारी वृक्ष या तो खाली होता है (एक शून्य सूचक द्वारा दर्शाया जाता है), या एक एकल नोड से बना होता है, जहां बाईं और दाईं ओर संकेत (पुनरावर्ती परिभाषा आगे) एक द्विआधारी वृक्ष को इंगित करता है।

एक बाइनरी सर्च ट्री (BST) या "ऑर्डर किया हुआ बाइनरी ट्री" एक प्रकार का बाइनरी ट्री है जहाँ नोड्स को क्रम में व्यवस्थित किया जाता है: प्रत्येक नोड के लिए, इसके बाएं सबट्री में सभी तत्व नोड (<) से कम होते हैं, और सभी तत्व इसके दाईं ओर सबट्री नोड (>) से अधिक है।

    5
   / \
  3   6 
 / \   \
1   4   9    

ऊपर दिखाया गया पेड़ एक बाइनरी सर्च ट्री है - "रूट" नोड एक 5 है, और इसके बाएं सबट्री नोड्स (1, 3, 4) <5 हैं, और इसके राइट सबट्री नोड्स (6, 9)> 5 हैं। पुनरावर्ती रूप से, प्रत्येक उपप्रकार को भी द्विआधारी खोज ट्री बाधा का पालन करना चाहिए: 1 (1, 3, 4) सबट्री में, 3 मूल है, 1 <3 और 4> 3 है।

समस्याओं में सटीक शब्दों के लिए देखें - "बाइनरी ट्री" एक "बाइनरी ट्री" से अलग है।


@ गैब्रिएलस्टैपल्स ने पेड़ की संरचना को जोड़ा।
गौरव बोरोल

14

जैसा कि ऊपर दिए गए सभी लोगों ने बाइनरी ट्री और बाइनरी सर्च ट्री के बीच अंतर के बारे में बताया है, मैं सिर्फ यह परीक्षण कर रहा हूं कि क्या दिया गया बाइनरी ट्री बाइनरी सर्च ट्री है या नहीं।

boolean b = new Sample().isBinarySearchTree(n1, Integer.MIN_VALUE, Integer.MAX_VALUE);
.......
.......
.......
public boolean isBinarySearchTree(TreeNode node, int min, int max)
{

    if(node == null)
    {
        return true;
    }

    boolean left = isBinarySearchTree(node.getLeft(), min, node.getValue());
    boolean right = isBinarySearchTree(node.getRight(), node.getValue(), max);

    return left && right && (node.getValue()<max) && (node.getValue()>=min);

}

आशा है इससे आपकी मदद होगी। क्षमा करें, अगर मैं इस विषय से विचलित हो रहा हूँ जैसा कि मैंने महसूस किया कि यह यहाँ उल्लेख के लायक है।


1
या तो बाएं या दाएं सबट्री खाली हो सकते हैं। आपका कोड उस केस को सही तरीके से हैंडल नहीं करता है।
लोर्ने का

11

बाइनरी ट्री एक के लिए खड़ा है डेटा संरचना जो से बना है नोड्स कर सकते हैं कि केवल है दो बच्चों संदर्भ।

दूसरी ओर बाइनरी सर्च ट्री ( BST ), बाइनरी ट्री डेटा संरचना का एक विशेष रूप है, जहां प्रत्येक नोड का एक तुलनीय मूल्य होता है, और छोटे मूल्यवान बच्चे बायें से जुड़े होते हैं और दाएं से जुड़े बड़े मूल्यवान बच्चे होते हैं।

इस प्रकार, सभी BST के हैं बाइनरी ट्री लेकिन केवल कुछ बाइनरी ट्री रों भी हो सकता है ' BST । सूचित करें कि BST बाइनरी ट्री का सबसेट है ।

तो, बाइनरी ट्री बाइनरी सर्च ट्री की तुलना में सामान्य डेटा-संरचना का अधिक है । और आपको यह भी सूचित करना होगा कि बाइनरी सर्च ट्री एक सॉर्टेड ट्री है, जबकि जेनेरिक बाइनरी ट्री के लिए नियमों का ऐसा कोई सेट नहीं है ।

बाइनरी ट्री

एक Binary Treeजो है नहीं एक BST;

         5
       /   \
      /     \
     9       2
    / \     / \
  15   17  19  21

बाइनरी सर्च ट्री (सॉर्ट किया गया पेड़)

एक द्विआधारी खोज वृक्ष जो भी एक है बाइनरी ट्री ;

         50
       /    \
      /      \
     25      75
    /  \    /  \
  20    30 70   80

बाइनरी सर्च ट्री नोड प्रॉपर्टी

यह भी सूचित करें कि BST में किसी भी मूल नोड के लिए ;

  • सभी बाएँ नोड्स का मूल नोड के मान से छोटा मान है। ऊपरी उदाहरण में, मानों के साथ नोड्स {20, 25, 30} जो सभी 50 के बाएं ( बाएं वंशज ) पर स्थित हैं, 50 से छोटे हैं।

  • सभी सही नोड्स का मूल नोड के मान से अधिक मूल्य है। ऊपरी उदाहरण में, मानों के साथ नोड्स {70, 75, 80} जो सभी 50 के दाईं ओर ( दाएं वंशज ) पर स्थित हैं, 50 से अधिक हैं।

बाइनरी ट्री नोड के लिए ऐसा कोई नियम नहीं है । बाइनरी ट्री नोड के लिए एकमात्र नियम दो बच्चे हैं, इसलिए यह स्वयं ही बताता है कि बाइनरी क्यों कहा जाता है ।


क्या हम सरल बाइनरी ट्री को लागू कर सकते हैं? क्या कोई कार्यान्वयन उपलब्ध है? और इस पेड़ का क्या उपयोग है?
आसिफ मुश्ताक

@UnKnown आप बाइनरी सर्च ट्री का उपयोग सॉर्ट और खोज के लिए कर सकते हैं। आप यहां बाइनरी सर्च ट्री का कार्यान्वयन पा सकते हैं: github.com/bzdgn/data-structures-in-java/blob/master/src/…
Levent Divilioglu

मुझे इसके बारे में पता है लेकिन क्या सिंपल ट्री या सिंपल बाइनरी ट्री का कोई अस्तित्व है? या सरल बाइनरी ट्री के किसी भी कार्यान्वयन?
आसिफ मुश्ताक

इसका उपयोग करने का कोई मतलब नहीं है, लेकिन आप रूट और बच्चों के लिए मनमाने ढंग से नोड उदाहरण जोड़ सकते हैं।
लेवेंट डिविलीग्लू

10

एक बाइनरी सर्च ट्री एक विशेष प्रकार का बाइनरी ट्री है जो निम्नलिखित संपत्ति प्रदर्शित करता है: किसी भी नोड n के लिए, n के बाएं सबट्री में प्रत्येक वंशज नोड का मान n के मूल्य से कम है, और प्रत्येक अवरोही नोड का मूल्य सही उप-वर्ग में है n के मान से अधिक है।


8

बाइनरी ट्री

बाइनरी ट्री कुछ भी हो सकता है जिसमें 2 बच्चे और 1 माता-पिता हैं। इसे लिंक की गई सूची या सरणी के रूप में, या आपके कस्टम एपीआई के साथ लागू किया जा सकता है। एक बार जब आप इसमें और विशिष्ट नियम जोड़ना शुरू करते हैं, तो यह अधिक विशिष्ट वृक्ष बन जाता है । सबसे आम ज्ञात कार्यान्वयन यह है कि, बाईं ओर छोटे नोड्स और दाईं ओर बड़े वाले जोड़ें।

उदाहरण के लिए, आकार 9 और ऊंचाई 3 का एक लेबल बाइनरी ट्री, रूट नोड के साथ जिसका मूल्य 2. वृक्ष असंतुलित है और छँटा नहीं गया हैhttps://en.wikipedia.org/wiki/Binary_tree

यहां छवि विवरण दर्ज करें

उदाहरण के लिए, बाईं ओर के पेड़ में, A के 6 बच्चे हैं {B, C, D, E, F, G}। इसे दाईं ओर बाइनरी ट्री में बदला जा सकता है।

यहां छवि विवरण दर्ज करें

द्विआधारी खोज

बाइनरी सर्च तकनीक / एल्गोरिदम है जो नोड चेन पर विशिष्ट आइटम खोजने के लिए उपयोग किया जाता है। बाइनरी खोज क्रमबद्ध सरणियों पर काम करती है

बाइनरी खोज लक्ष्य मान की तुलना सरणी के मध्य तत्व से करती है; यदि वे असमान हैं, तो जो लक्ष्य झूठ नहीं बोल सकता है वह आधा समाप्त हो गया है और शेष आधे पर खोज जारी है जब तक कि यह सफल न हो या शेष आधा खाली न हो। https://en.wikipedia.org/wiki/Binary_search_algorithm

यहां छवि विवरण दर्ज करें

एक पेड़ जो बाइनरी खोज का प्रतिनिधित्व करता है । यहां खोजे जा रहे ऐरे [२०, ३०, ४०, ५०, ९ ०, १००] और लक्ष्य मूल्य ४० है।

यहां छवि विवरण दर्ज करें

बाइनरी सर्च ट्री

यह बाइनरी ट्री के कार्यान्वयन में से एक है। यह खोज के लिए विशेष है ।

बाइनरी सर्च ट्री और बी-ट्री डेटा संरचनाएं बाइनरी सर्च पर आधारित हैं ।

बाइनरी सर्च ट्री (BST), जिसे कभी-कभी ऑर्डर किए गए या सॉर्ट किए गए बाइनरी ट्री कहा जाता है, एक विशेष प्रकार के कंटेनर होते हैं : डेटा संरचनाएं जो मेमोरी में "आइटम" (जैसे संख्या, नाम आदि) को स्टोर करती हैं। https://en.wikipedia.org/wiki/Binary_search_tree

जड़ पर 8 के साथ आकार 9 और गहराई 3 का एक द्विआधारी खोज पेड़। पत्तियाँ खींची नहीं जातीं।

यहां छवि विवरण दर्ज करें

और अंत में लागू प्रसिद्ध डेटा-संरचनाओं और एल्गोरिदम के प्रदर्शन की तुलना के लिए महान स्कीमा:

यहां छवि विवरण दर्ज करें

एल्गोरिदम से ली गई छवि (4 वां संस्करण)


4

बाइनरी ट्री एक ऐसा पेड़ है जिसके बच्चे कभी भी दो से अधिक नहीं होते हैं। एक द्विआधारी खोज पेड़, हमलावर का अनुसरण करता है कि बाएं बच्चे का रूट नोड की कुंजी से छोटा मूल्य होना चाहिए, जबकि सही बच्चे का रूट नोड की कुंजी की तुलना में अधिक मूल्य होना चाहिए।


4
  • बाइनरी सर्च ट्री: जब इन्वर्टर ट्रैवर्सल बाइनरी ट्री पर बनाया जाता है, तो आपको सम्मिलित आइटम के सॉर्ट किए गए मान मिलते हैं
  • बाइनरी ट्री: किसी भी प्रकार के ट्रैवर्सल में कोई क्रमबद्ध क्रम नहीं पाया जाता है

कोई क्रमबद्ध आदेश की जरूरत पाया जा। एक बाइनरी सर्च ट्री भी एक बाइनरी ट्री है। वे पारस्परिक रूप से विशिष्ट नहीं हैं। BST BT का उचित उपसमूह है।
लोर्ने

3

किसी बाइनरी ट्री की जांच करने के लिए बाइनरी ट्री यहां बाइनरी सर्च ट्री है और एक वैकल्पिक दृष्टिकोण है।

Traverse ट्री में Inorder फैशन (यानी वाम बाल -> जनक -> सही बच्चा), स्टोर चल नोड डाटा एक अस्थायी चर में कहते हैं की सुविधा देता है अस्थायी , बस में भंडारण से पहले अस्थायी , चेक wheather वर्तमान नोड के डेटा उच्च उसके बाद पिछले एक या नहीं है । तो बस इसे बाहर तोड़ , ट्री बाइनरी सर्च ट्री नहीं है और दूसरे छोर को पार करना है।

नीचे जावा के साथ एक उदाहरण दिया गया है:

public static boolean isBinarySearchTree(Tree root)
{
    if(root==null)
        return false;

    isBinarySearchTree(root.left);
    if(tree.data<temp)
        return false;
    else
        temp=tree.data;
    isBinarySearchTree(root.right);
    return true;
}

बाहर अस्थायी चर बनाए रखें


या तो सबट्री शून्य हो सकती है। आपका एल्गोरिथ्म उस मामले को सही ढंग से नहीं संभालता है।
लोर्न

1

एक बाइनरी सर्च ट्री में, सभी नोड्स को एक विशिष्ट क्रम में व्यवस्थित किया जाता है - रूट नोड के बाईं ओर नोड्स का इसकी जड़ की तुलना में एक छोटा मूल्य होता है, और नोड के दाईं ओर के सभी नोड्स में मान के मान से अधिक होता है जड़।


0

एक पेड़ को एक द्विआधारी वृक्ष कहा जा सकता है यदि और केवल अगर किसी भी नोड के बच्चों की अधिकतम संख्या दो है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.