रिकर्सिवली एक बाइनरी ट्री पर खोजें

वोट
0

किसी को भी करता है, तो उसके सही या incorrect.i प्रत्यावर्तन पढ़ रहा हूँ इन दिनों मुझे कोड के इस टुकड़े का पता लगाने में मदद कर सकते हैं।

boolean search(Element element) {
    Element c=first;
    if(c==null)
        return false;
    else if(element.asset < c.asset)
        if(c.left==null)
            return false;
        else
            return search(c.left);
    else if(element.data>c.data)
        if(c.right==null)
            return false;
        else
            return search(c.right);
     else  
         return element.asset==c.asset;
}
07/08/2011 को 13:44
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
3

यह हालत रोक का अभाव है। आप अगर t.left == बातिल की जाँच करनी चाहिए, या आप NullPointerException मिल जाएगा। भी, आप वापस आ जाएगी t.left.isExist(..)या t.right.isExist(...)और नहीं isExist [आप बेटे पर इस विधि आह्वान करना चाहते हैं]

वर्तमान में, इस संस्करण अनंत लूप में मिल जाएगा - क्योंकि आप हमेशा एक ही रूट नोड में जाँच करेगा।

07/08/2011 को 13:47
का स्रोत उपयोगकर्ता

वोट
1

आपका कोड सममित नहीं है।

एक तरफ के लिए, आप कॉल isExist(t.left)एक और आप फोन के लिए,isExist(a.right)

आप शायद कॉल करना चाहते हैं t.left.isExist(a)और t.right.isExist(a)है, लेकिन जैसा कि आप एक पूरी की जरूरत नहीं है कि विशुद्ध रूप से सट्टा SSCCE हमें को देखने के लिए के लिए।

07/08/2011 को 13:52
का स्रोत उपयोगकर्ता

वोट
0

यह वाक्य रचना सही जावा है। लेकिन मैं नहीं दिख रहा है तो संभवत: यह कैसे कर किया जा सकता है कि तुम क्या करना चाहते हैं।

ऐसा लगता है कि 'तत्व' पैरामीटर बात आप खोज रहे हैं और वर्तमान कक्षा में 'पहली' फ़ील्ड है द्विआधारी पेड़ की जड़ है।

यह स्पष्ट नहीं है अगर द्विआधारी पेड़ और खोज के लिए कुंजी (तत्व कक्षा में) 'संपत्ति' या 'डेटा' है। 'से कम' परीक्षण 'संपत्ति' जबकि 'से अधिक' परीक्षण का उपयोग करता है 'डेटा' का उपयोग करता है,। यह संभावना है कि दोनों लाइनों एक ही क्षेत्र का उपयोग करना चाहिए लगता है। यह हो सकता है कि इन दो क्षेत्रों ( 'संपत्ति' या 'डेटा') में से एक होना चाहिए नहीं सब पर इस विधि में सन्दर्भ रूप में। हो सकता है कि विधि की अंतिम पंक्ति सिर्फ 'return true;' किया जाना चाहिए?

(मुझे लगता है कि "बंद हालत" संदेह और "कोड सममित नहीं है" उत्तर ऊपर दोनों सही नहीं हैं लेकिन मैं गलत हो सकता है:। यह केवल दिए गए कोड के साथ बताने के लिए मुश्किल है।)

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

(इनमें से कुछ। मुझे अनुमान लगा आप क्या चाहते हैं या करना चाहते हैं, सीमित जानकारी दी आधारित काल्पनिक है, तो मैं कर सकता है, ज़ाहिर है, काफी गलत हो।)

09/08/2011 को 03:11
का स्रोत उपयोगकर्ता

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