2012-04-24 16 views
7

जावा असाइनमेंट के हिस्से के रूप में, मुझे एक इनपुट अंकगणितीय अभिव्यक्ति लेनी है और उसे बाइनरी पेड़ में स्टोर करना है।एक इंफिक्स अभिव्यक्ति (कोष्ठक के साथ) को बाइनरी पेड़ में परिवर्तित करना

मैंने उस हिस्से को छोड़कर असाइनमेंट के लिए आवश्यक सब कुछ किया है जहां मैंने अभिव्यक्ति की स्ट्रिंग में पढ़ा है और इसे बाइनरी पेड़ में संग्रहीत किया है।

मैंने बाइनरीट्री नामक एक कक्षा बनाई है। इसका एकमात्र क्षेत्र रूट नामक एक ट्रीनोड है। इस ट्रीनोड को बाइनरीट्री में एक आंतरिक क्लास के रूप में परिभाषित किया गया है। इसमें 3 फ़ील्ड, एक सामान्य डेटा फ़ील्ड है, और दो बच्चे (बाएं और दाएं) हैं जो बाइनरी ट्री टाइप करते हैं।

मैं एक बहुत ही मुश्किल समय एक अभिव्यक्ति में पढ़ने के लिए एक एल्गोरिथ्म को परिभाषित करने आ रही हैं जैसे

(5 * (2 + 3)^3)/2

और की तरह एक पेड़ में भंडारण यह

  /
     ^  2 
    *  3 
    5 + 
    2 3 

क्या कोई एल्गोरिदम के साथ मदद कर सकता है?

+1

पहले एक सरल समीकरण स्ट्रिंग का प्रयास करें: '1 + 2'। जब आप इसे प्राप्त करते हैं, तो करें: '1 + 2 * 3'। फिर भी अधिक जटिल: '1 * 2 + 3'। अंत में: '(1 + 2) * 3' –

+0

क्या आप अलगाव के लिए स्पष्टीकरण चाहते हैं? – Tushar

उत्तर

6

shunting-yard algorithm पर एक नज़र डालें। विकिपीडिया से:

कंप्यूटर विज्ञान में, शंटिंग-यार्ड एल्गोरिदम इंफिक्स नोटेशन में निर्दिष्ट गणितीय अभिव्यक्तियों को पार्स करने का एक तरीका है। इसका उपयोग रिवर्स पोलिश नोटेशन (आरपीएन) या एक अमूर्त वाक्यविन्यास पेड़ (एएसटी) के रूप में उत्पादन के उत्पादन के लिए किया जा सकता है। एल्गोरिदम का आविष्कार डिस्क्रस्ट्रा द्वारा किया गया था और "शंटिंग यार्ड" एल्गोरिदम नाम दिया गया था क्योंकि इसका ऑपरेशन रेलरोड शंटिंग यार्ड जैसा दिखता है। डिजस्ट्रा ने पहले मैथमैटिश सेंट्रम रिपोर्ट एमआर 34/61 में शंटिंग यार्ड एल्गोरिदम का वर्णन किया।

3

यहां कुछ C++ code to create a binary expression tree है जो दो ढेर का उपयोग करता है, ऑपरेटरों के लिए एक और ऑपरेंड के लिए दूसरा। आखिरकार, ऑपरेंड स्टैक में एक तत्व, पूर्ण बाइनरी अभिव्यक्ति वृक्ष होता है।