एक सरणी से एक BST बनाना

वोट
1

मैं निम्नलिखित (अजीब) रास्ते में एक द्विआधारी खोज वृक्ष बनाने की जरूरत:

मैं एक सरणी दिया हूँ (ए [n])। एक [1] पेड़ की जड़ हो जाता है।

  • फिर, मैं एक [1] + A [2] के लिए छोड़ दिया जड़ की सबट्री (subtree1, नीचे दिए गए थे) सम्मिलित है और यह भी एक [1] -एक [2] सही सबट्री के लिए रूट की (subtree2) डालें।

  • मैं सम्मिलित एक [1] + A [2] + A [3] subtree1 के बाईं सबट्री के लिए (subtree3) और ए [1] + A [2] -एक [3] subtree1 (subtree4) के अधिकार सबट्री करने के लिए।

  • फिर, मैं एक [1] -एक डालने [2] + A [3] subtree2 (subtree5) और ए [1] -एक [2] -एक [3] subtree2 के अधिकार सबट्री के लिए (subtree6 के बाईं सबट्री के लिए )।

  • मैं subtree3, subtree4, subtree5, subtree6 के लिए दोहराएँ जब तक मैं सरणी के अंत तक पहुँचते।

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

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

अन्य प्रश्न और विचार विमर्श मैं समझता हूँ कि पूरे समाधान पूछ तो मैं यह स्पष्ट करना मैं समाधान के लिए, लेकिन यह करने के लिए मार्गदर्शन के लिए नहीं कह रहा हूँ कि चाहता था के खिलाफ एक नीति है पर चारों ओर देख रहे हैं। किसी को देखने के लिए चाहते हैं, तो मैं आपको दिखा सकता है मैं पहले से ही क्या किया है।

24/03/2011 को 02:20
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
0

जिस तरह से प्रत्यावर्तन करने के लिए हमेशा ग्रहण करने के लिए आप पहले से ही हाथ में एक काम कर कार्य हो रहा है। तो चलो [जावा सिंटैक्स का उपयोग] देखते हैं ...

Tree buildTree(int currentSum, int[] array, int index, boolean sign);

मान लीजिए कि काम करता है। फिर यू सूचकांक मैं एक पेड़ के निर्माण के लिए क्या करना चाहिए होगा?

// current value to look at at this level
int curValue = array[index];
// depending on sign, it may be negative
if (!sign) { 
  curValue *= -1;
}
// add it to the running total
int nodeValue = currentSum + curValue;
Node nd = new Node(nodeValue);

nd.left = buildTree(nodeValue, array, index + 1, true);
nd.right = buildTree(nodeValue, array, index + 1, false);

वह मूल रूप से यह है। आप किनारे मामलों की देखभाल की जरूरत है: के सूचकांक = array.length, बहुत पहले नोड के निर्माण, और की तरह

24/03/2011 को 02:27
का स्रोत उपयोगकर्ता

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