📘 CodingMarble Learn

डेटा स्ट्रक्चर में ट्री: बाइनरी ट्री और बाइनरी सर्च ट्री

ट्री डेटा को नोड्स में रखता है जो किनारों (edges) से जुड़े होते हैं, जैसे उल्टा खड़ा वंश-वृक्ष। सबसे ऊपर वाला नोड रूट (मूल) है, जिनके बच्चे नहीं वे लीफ (पत्ती) हैं। n नोड वाले ट्री में n − 1 किनारे होते हैं। नोड की गहराई = रूट से उसकी दूरी (किनारों में); ट्री की ऊँचाई = रूट से पत्ती तक सबसे लंबा रास्ता। बाइनरी ट्री में हर नोड के अधिकतम दो बच्चे होते हैं। बाइनरी सर्च ट्री (BST) में छोटी कुंजियाँ बाएँ, बड़ी दाएँ रहती हैं, इसलिए खोज हर कदम पर आधा ट्री छोड़ देती है। ट्रैवर्सल हर नोड पर जाता है: प्री-ऑर्डर (रूट, बायाँ, दायाँ), इन-ऑर्डर (बायाँ, रूट, दायाँ), पोस्ट-ऑर्डर (बायाँ, दायाँ, रूट)। BST पर इन-ऑर्डर क्रमबद्ध (sorted) आउटपुट देता है।

🎬 कदम-दर-कदम कहानी

  1. ट्री नोड्स से बनता है जो किनारों से जुड़े हैं। सबसे ऊपर रूट है। जिन नोड्स के बच्चे नहीं, वे पत्तियाँ हैं।
  2. हर पंक्ति एक स्तर है। रूट स्तर 0 पर है। ऊँचाई = रूट से पत्ती तक सबसे लंबा रास्ता।
  3. बाइनरी ट्री में हर नोड के अधिकतम दो बच्चे: बायाँ और दायाँ। किसी भी ट्री को पैरेंट लिस्ट से रख सकते हैं।
  4. बाइनरी सर्च ट्री में छोटी कुंजी बाएँ, बड़ी दाएँ। 60 खोजो: दाएँ, फिर बाएँ। 3 जाँच में मिल गया।
  5. ट्रैवर्सल हर नोड पर एक बार जाता है। BST पर इन-ऑर्डर (बायाँ, रूट, दायाँ) संख्याएँ क्रम से देता है।
  6. अब आपकी बारी: BST में संख्याएँ डालिए। Insert दबाने से पहले अनुमान लगाइए कि वह कहाँ जाएगी।

टिप: 3D दृश्य को घुमाने के लिए खींचें। ज़ूम के लिए दो उंगलियाँ इस्तेमाल करें।

🤔 आम शंकाएँ और उनके जवाब

असली पेड़ ऊपर बढ़ता है, तो रूट ऊपर क्यों बनाते हैं?

यह सिर्फ़ परंपरा है: हम ऊपर से नीचे पढ़ते हैं, इसलिए शुरुआत (रूट) सबसे ऊपर रखते हैं।

ऊँचाई नोड में गिनें या किनारों में?

यहाँ किनारों में, तो अकेले रूट की ऊँचाई 0। कुछ किताबें नोड गिनती हैं; नियम देख लें।

क्या हर बाइनरी ट्री BST है?

नहीं। BST वह बाइनरी ट्री है जो छोटा-बाएँ, बड़ा-दाएँ नियम भी मानता है।

BST का इन-ऑर्डर क्रमबद्ध क्यों होता है?

हर नोड पर यह पहले सारे छोटे (बाएँ), फिर नोड, फिर सारे बड़े (दाएँ) छापता है।

क्या BST धीमा हो सकता है?

हाँ। क्रम से संख्याएँ डालें तो चेन बनती है। फ़्री प्ले में आज़माइए।

ट्री क्या है?

ट्री ऊपर से नीचे वाली बनावट में डेटा रखने का तरीका है। हर चीज़ एक नोड में रहती है। नोड्स किनारों (edges) से जुड़ते हैं।

ट्री में कोई लूप नहीं होता और किन्हीं दो नोड्स के बीच ठीक एक रास्ता होता है। n नोड हों तो किनारे हमेशा n − 1।

स्तर, गहराई, ऊँचाई और डिग्री

नोड की गहराई = रूट से उस तक के किनारों की संख्या। रूट की गहराई 0। एक ही गहराई वाले नोड एक स्तर (level) बनाते हैं।

ट्री की ऊँचाई = किसी भी पत्ती की सबसे बड़ी गहराई। सिर्फ़ रूट वाले ट्री की ऊँचाई 0। (कुछ किताबें किनारों की जगह नोड गिनती हैं, तो 1 जुड़ जाता है। नियम हमेशा देख लें।)

नोड की डिग्री = उसके बच्चों की संख्या।

रूटेड ट्री को रखना: पैरेंट ऐरे

नोड्स को 1 से n तक नंबर दें। हर नोड के आगे उसका पैरेंट लिखें; रूट के लिए 0। उदाहरण: नोड 1..5 का पैरेंट ऐरे [0, 1, 1, 2, 2] है, तो 1 रूट है, 2 और 3 नोड 1 के बच्चे, 4 और 5 नोड 2 के बच्चे। जो नोड कभी पैरेंट के रूप में नहीं आता वह पत्ती है (यहाँ 3, 4, 5)। दूसरा तरीका चाइल्ड लिस्ट है।

बाइनरी ट्री

बाइनरी ट्री में हर नोड के अधिकतम दो बच्चे होते हैं: बायाँ और दायाँ।

स्तर k पर अधिकतम 2k नोड हो सकते हैं। कोड में नोड एक रिकॉर्ड होता है: key, left, right (बच्चा न हो तो खाली/None)।

बाइनरी सर्च ट्री (BST)

BST वह बाइनरी ट्री है जिसमें हर नोड पर एक नियम है: बाईं सबट्री की सारी कुंजियाँ छोटी, दाईं की सारी बड़ी।

खोज (Search)

रूट से शुरू करें। कुंजी बराबर हो तो रुकें। छोटी हो तो बाएँ, बड़ी हो तो दाएँ जाएँ। खाली जगह पहुँचे तो कुंजी नहीं है।

जोड़ना (Insert)

कुंजी को खोजें; जहाँ खोज ट्री से बाहर गिरे, वहाँ नई पत्ती जोड़ दें।

संतुलित BST में n नोड हों तो खोज लगभग log2 n कदम लेती है (10 लाख कुंजियाँ → लगभग 20 जाँच)। अगर कुंजियाँ पहले से क्रम में (10, 20, 30, …) डालें तो BST लंबी चेन बन जाता है और खोज धीमी (n कदम) हो जाती है।

ट्री ट्रैवर्सल

ट्रैवर्सल में हर नोड पर ठीक एक बार जाते हैं।

def inorder(node):
    if node is None:
        return
    inorder(node.left)
    print(node.key)
    inorder(node.right)

घर पर करके देखें

सात पर्चियों पर 50, 30, 70, 20, 40, 60, 80 लिखिए। BST नियम से उन्हें एक-एक करके फ़र्श पर रखिए। फिर इन-ऑर्डर में उठाइए और देखिए कि वे क्रम से आती हैं। अब 10, 20, 30, 40 डालकर देखिए: कैसी आकृति बनती है?

मुख्य सूत्र और परिभाषाएँ

हल किए गए उदाहरण

1. एक ट्री में 12 नोड हैं। कितने किनारे होंगे?

किनारे = नोड − 1 = 12 − 1 = 11।

2. नोड 1..6 का पैरेंट ऐरे [3, 3, 0, 1, 1, 2] है। रूट, पत्तियाँ और ऊँचाई बताइए।

रूट = नोड 3 (पैरेंट 0)। 3 के बच्चे: 1 और 2। 1 के बच्चे: 4 और 5। 2 का बच्चा: 6। पत्तियाँ: 4, 5, 6। गहराई: 3→0; 1,2→1; 4,5,6→2। ऊँचाई = 2।

3. खाली BST में 40, 20, 60, 10, 30, 50 डालिए और इन-ऑर्डर व प्री-ऑर्डर लिखिए।

40 रूट। 20 < 40 बाएँ; 60 दाएँ। 10: 20 के बाएँ। 30: 20 के दाएँ। 50: 60 के बाएँ। इन-ऑर्डर: 10, 20, 30, 40, 50, 60 (क्रम से)। प्री-ऑर्डर: 40, 20, 10, 30, 60, 50।

4. ऊँचाई 3 वाले परफ़ेक्ट बाइनरी ट्री में कितने नोड और कितनी पत्तियाँ?

नोड = 2^(3+1) − 1 = 15। पत्तियाँ स्तर 3 पर: 2^3 = 8।

आम गलतियाँ

अभ्यास क्विज़

1. जिस नोड का कोई बच्चा नहीं, उसे कहते हैं:
2. 20 नोड वाले ट्री में कितने किनारे?
3. BST में रूट से छोटी कुंजी कहाँ रहती है?
4. BST का कौन-सा ट्रैवर्सल क्रमबद्ध आउटपुट देता है?
5. बाइनरी ट्री के स्तर 3 पर अधिकतम नोड:

अभ्यास: खुद जवाब दो

अपना जवाब लिखो या चुनो, फिर जाँचें दबाओ। अटको तो संकेत देखो; जवाब देने के बाद पूरा हल दिखेगा।

अक्सर पूछे जाने वाले प्रश्न

डेटा स्ट्रक्चर में ट्री क्या है?

नोड्स और किनारों से बनी नॉन-लीनियर संरचना, जिसमें ऊपर एक रूट होता है और कोई लूप नहीं। फ़ोल्डर जैसे पदानुक्रम वाले डेटा के लिए उपयुक्त।

बाइनरी ट्री और बाइनरी सर्च ट्री में क्या अंतर है?

बाइनरी ट्री सिर्फ़ दो बच्चों की सीमा रखता है। BST में क्रम का नियम भी है: बाईं सबट्री छोटी, दाईं बड़ी।

तीन डेप्थ-फ़र्स्ट ट्रैवर्सल कौन-से हैं?

प्री-ऑर्डर (रूट, बायाँ, दायाँ), इन-ऑर्डर (बायाँ, रूट, दायाँ) और पोस्ट-ऑर्डर (बायाँ, दायाँ, रूट)।

यह कहाँ पढ़ाया जाता है

रोमानियाClasa a XI-aTrees
जर्मनीJahrgangsstufe 12Trees

पहले यह पढ़ें

आगे पढ़ें

इससे जुड़े पाठ

सभी कंप्यूटर विज्ञान पाठ