2011-01-27 16 views
8

अद्यतन:
मैं मैं क्या हटा कोशिश कर रहा हूँ का एक उदाहरण के अधिक पाया: Managing Hierarchical Data in MySQL। मैं ऐसा करना चाहता हूं लेकिन जावास्क्रिप्ट में क्योंकि मैं एक ऐप बना रहा हूं जो एक पदानुक्रमित संरचना में टिप्पणियों को लेता है, और अधिक विशिष्ट reddit.com होने के लिए। यदि आपके पास क्रोम वेब ब्राउज़र पर सुंदर JSON एक्सटेंशन है, तो reddit पर जाएं और थ्रेड्स टिप्पणियों पर क्लिक करें और फिर पार्सिंग को देखने के लिए url पर .json जोड़ें।
मुझे जेएसओएन डेटा ठीक लगता है, यह सिर्फ टिप्पणियों के माध्यम से विश्लेषण करता है और उचित HTML को यह दिखाने के लिए जोड़ता है कि यह घोंसला है।
समाधान के लिए विचार?एल्गोरिथ्म के लिए ट्री Traversal


पुराने प्रश्न:
मैं एक कार्यक्रम पर काम कर रहा हूँ और मैं एक बात यह है कि मैं तर्क यह पता लगाने की इससे पहले कि मैं कोड लिखने की जरूरत के लिए आए हैं। मैं एक पेड़ प्रारूप में डेटा ले रहा हूं लेकिन प्रत्येक माता-पिता नोड और केवल पेड़ के लिए कई बच्चों की संभावना के साथ मुझे पेड़ के वजन या पेड़ के साथ डेटा मिल रहा है, जहां प्रत्येक नोड में दो बच्चे नोड होते हैं। while लूप लेकिन जब मैं लिखने के लिए कैसे मेरे एल्गोरिथ्म मैं अंत के लिए नेस्ट लिखित काम करेगा कोशिश अब

startingParent[15] // [# of children] 
    child1[0] 
    child2[5] 
     child2ch1[4] 
     ... 
     child2ch5[7] 
    child3[32] 
    ... 
    child15[4] 

/मैं: तो मैं एल्गोरिथ्म यह पता लगाने की इस तरह एक पेड़ के प्रत्येक नोड मूल्यांकन करने के लिए कोशिश कर रहा हूँ पेड़ की ऊंचाई के प्रत्येक स्तर के लिए एक लूप लिखना समाप्त करें जो प्रति नोड के अज्ञात संख्या के साथ गतिशील डेटा और अज्ञात ऊंचाई के पेड़ के लिए यह काम नहीं करता है। मुझे पता है कि किसी बिंदु पर मैंने सीखा कि इस तरह के पेड़ को कैसे पार करना है, लेकिन यह अभी पूरी तरह से मुझे बच रहा है। किसी को भी पता है कि यह loops के मामले में कैसे किया जाता है?

उत्तर

15

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

structure <- new stack (or queue) 
push root onto structure 
while structure is not empty 
    node <- pop top off of structure 
    visit(node) 
    for each child of node 
    push child onto structure 
loop 

विकिपीडिया संदर्भ

8

रिकर्सन का प्रयोग करें, लूप नहीं।
Breadth first search
Depth first search
उन की मदद करनी चाहिए आप आप क्या हासिल करना

+0

यदि यह होमवर्क नहीं है और वह एक डीएफएस चाहता है, निश्चित रूप से। उन्होंने विशेष रूप से लूप्स के साथ ऐसा करने का एक तरीका मांगा था। बीएफएस किसी भी तरह से रिकर्सन के साथ अच्छा नहीं किया जाता है। –

+0

हाँ, यह होमवर्क नहीं है, यह एक ऐप के लिए है जिसे मैं बना रहा हूं और मैं एक सूची तैयार करने की कोशिश कर रहा हूं, अच्छी तरह से एक टिप्पणी पृष्ठ की तरह है इसलिए जवाब के स्तर हैं। मुख्य टिप्पणी, उत्तर, उस उत्तर का जवाब, इत्यादि।तो मैं टिप्पणियों के माध्यम से विश्लेषण करने और संरचना के लिए उपयुक्त एचटीएमएल बनाने के लिए एक रास्ता तलाश रहा था। – HuXu7

1

वैसे ही जैसे

def travel(node): 
    for child in node.childs: 
     # Do something 
     travel(child) 
+1

बस एक छोटा सा चिमटा लेकिन आमतौर पर उस लूप के बाहर होने के लिए "कुछ करें" के लिए यह बहुत साफ है। इस तरह रूट नोड याद आती है। –

1

सबसे पेड़ ट्रेवर्सल के लिए सबसे आसान कोड आमतौर पर पुनरावर्ती है प्रत्यावर्तन का उपयोग कोशिश कर रहे हैं के साथ शुरू करने। आपके जैसे मल्टीवे पेड़ के लिए, आमतौर पर एक लूप रखना आसान होता है जो प्रत्येक पॉइंटर को बच्चे को देखता है, और सभी नोड्स के लिए तर्क के रूप में उस नोड के साथ खुद को कॉल करता है।

संबंधित मुद्दे