सी

2008-10-10 15 views
12

में एन-आरी पेड़ सी भाषा में एन-आरी पेड़ का साफ-सुथरा अनुकरण होगा?सी

struct task { 
    char command[MAX_LENGTH]; 
    int required_time; 
}; 
:

Particulary, मैं एक n-ary पेड़, नहीं आत्म ballancing, प्रत्येक नोड में बच्चों के एक अबाध संख्या है, जो प्रत्येक नोड उदाहरण के लिए इस तरह एक पहले से ही परिभाषित struct रखती है, के साथ लागू करना चाहते हैं

+0

एन-आरी द्वारा, आपका मतलब प्रशंसक डिग्री एन के साथ एक पेड़ है? आपको अधिक निर्दिष्ट करना होगा, उदाहरण के लिए स्वयं-संतुलन खोज पेड़, ट्राई, बी-पेड़, आदि – ephemient

+0

आप सही हैं, मैं कुछ और विवरण जोड़ने के लिए प्रश्न संपादित कर दूंगा। धन्यवाद! और मैट जे भी आपके उत्तर के लिए धन्यवाद! – mmutilva

उत्तर

12

पहली बार एक पास के रूप में, आप बस एक struct बना सकते हैं जो एक कार्य, साथ ही TreeNode रों की ओर इशारा का एक सेट रखती है (यह TreeNode कॉल)। यह सेट या तो एक सरणी हो सकता है (यदि एन तय किया गया है) या एक लिंक की गई सूची (यदि एन परिवर्तनीय है)। लिंक्ड सूची एक अतिरिक्त struct घोषित करने के लिए आप की आवश्यकता होगी वास्तविक बच्चे (पेड़ का हिस्सा) के लिए एक TreeNode सूचक के साथ, और सूची में अगले ListNode के लिए सूचक (यह ListNode कहा जाता है) (सूची के अंत में शून्य)।

वह कुछ इस तरह दिख सकता है:

struct task { 
    char command[MAX_LENGTH]; 
    int required_time; 
}; 

struct TreeNode; 

struct ListNode { 
    struct TreeNode * child; 
    struct ListNode * next; 
}; 

struct TreeNode { 
    struct task myTask; 
    struct ListNode myChildList; 
}; 
48

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

 
      R      R 
     /| \      | 
      B C D      B -- C -- D 
     /\ |      |   | 
     E F G      E -- F G 

तो, अपने मामले होगा:

struct task { 
    char command[MAX_LENGTH]; 
    int required_time; 
}; 

struct node { 
    struct task taskinfo; 
    struct node *firstchild; 
    struct node *nextsibling; 
}; 

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