एक द्विआधारी खोज वृक्ष की गहराई की गणना करें?

वोट
0

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

प्रत्यावर्तन और मैं साथ बहुत अच्छी तरह से नहीं मिलता है .. मैं इस समस्या को बहुत मुश्किल लग रहा है। मैं हालांकि एक पुनरावर्ती समाधान को देखने के लिए, यदि संभव हो तो करना चाहते हैं।

ध्यान दें:

() मैं accessors बनाया है Node.getLeft () और Node.getRight

09/12/2009 को 21:03
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


5 जवाब

वोट
2

के बारे में कैसे आप हाथ से धर्मविधान इस बारे में जाना होगा अगर मैं कागज के एक पत्रक पर आप के लिए एक BST की एक तस्वीर प्रस्तुत किया था के बारे में सोचो। यदि आप एक नोड पर होते हैं, तब आपको कौन सी जानकारी का ट्रैक रखने की जरूरत है? एक एक दिया नोड की ऊंचाई कैसे पता है?

यहाँ से, स्यूडोकोड में या यहाँ तक कि सीधे जावा में इस अनुवाद करने के लिए प्रयास करें। आप समस्या हो रही है, उपयोगकर्ताओं को अपनी सहायता कर सकते हैं ताकि टिप्पणी करने के लिए स्वतंत्र लग रहा है।

09/12/2009 को 21:08
का स्रोत उपयोगकर्ता

वोट
4

तुम सिर्फ एक गहराई काउंटर के रूप में आप पेड़ पार (यदि आप के लिए है पेड़ traversals देखो) रखने के लिए और काउंटर का मूल्य हर बार जब आप एक नोड तक पहुँचने जोड़ने की जरूरत है। तो बस नोड्स की संख्या से विभाजित करते हैं।

यह होमवर्क की तरह दिखता है तो मैं एक अधिक विस्तृत समाधान प्रदान नहीं कर रहा हूँ।

09/12/2009 को 21:09
का स्रोत उपयोगकर्ता

वोट
0

इस होमवर्क है? यदि ऐसा है तो इस तरह के रूप प्रश्न को टैग करें।

आप एक विधि है कि बना सकते हैं:

  • एक नोड संदर्भ और तर्क के रूप में एक गहराई है
  • वेतन वृद्धि गहराई
  • यदि नोड नहीं एक बच्चे नोड कॉल रिकर्सिवली छोड़ दिया और सही और अद्यतन राशि के लिए तदनुसार है
  • अन्यथा वापसी राशि + गहराई

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

09/12/2009 को 21:10
का स्रोत उपयोगकर्ता

वोट
0

हम सभी पत्र-गांठ पर जाएँ और यह पता लगाने कितना गहरा वे कर रहे हैं की जरूरत है। इससे पता चलता है:

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

अब 2 चीजों में से एक हो सकता है:

  • या तो नोड आप पाया एक पत्ता नोड है यानि यह किसी भी बच्चों को नहीं है, इस मामले में, आपके आगंतुक फोन करने वाले को इसकी गहराई वापस जाने के लिए की जरूरत है। हाँ, यह सिर्फ संख्या यह फोन करने वाले, + 1 से मिला देता है।

  • या यह एक पत्ती नोड नहीं है। उस मामले में, यह या तो 1 या 2 बच्चों होगा। हम वापस फोन करने वाले पर निर्भर हमारे बच्चों से उन गहराई रिपोर्ट प्राप्त करने के लिए तो बस गहराई बच्चों द्वारा वापस की राशि वापसी की जरूरत है।

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

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

09/12/2009 को 21:26
का स्रोत उपयोगकर्ता

वोट
0

चूंकि यह होमवर्क है, मैं बस आप एक जवाब देने के लिए नहीं करना चाहती। इसके बजाय, यहाँ एक अकेले लिंक्ड सूची की अवधि की गणना करने के लिए एक पुनरावर्ती तरीका है। उम्मीद है कि यह एक तरह से आप समझ सकते हैं में प्रत्यावर्तन का प्रदर्शन करेंगे, और आप अपने BST समस्या को हल करने वहाँ से एक्सट्रपलेशन कर सकते हैं।

public final class LL {
    public final int value;
    public LL next;

    public LL(final int value) {
        this.value = value;
    }

    public void add(final int value) {
        if (null == next) {
            next = new LL(value);
        } else {
            next.add(value);
        }
    }

    /**
     * Calculate the length of the linked list with this node as its head (includes this node in the count).
     *
     * @return the length.
     */
    public int length() {
        if (null == next) {
            return 1;
        }
        return 1 + next.length();
    }

    public static void main(final String... args) {
        final LL head = new LL(1);
        head.add(2);
        head.add(3);
        System.out.println(head.length());
        System.out.println(head.next.length());
    }
}
09/12/2009 को 21:57
का स्रोत उपयोगकर्ता

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