2013-07-03 8 views
6

मैं बाइनरी पेड़ की ऊंचाई की गणना करने के तर्क के बीच कुछ उलझन में हूं।उलझन में - बाइनरी पेड़ की ऊंचाई

कोड 1

public static int findHeight(Tree node) { 
    if(node == null) 
     return 0; 
    else { 
     return 1+Math.max(findHeight(node.left), findHeight(node.right)); 
    } 

} 

कोड 2

public static int findHeight(Tree node) { 
    if(node == null) 
     return -1; 
    else { 
     return 1+Math.max(findHeight(node.left), findHeight(node.right)); 
    } 

} 

मुझे लगता है, दूसरा एक सही है, क्योंकि यह नीचे दिए गए कोड के लिए सही जवाब देता है: -

Tree t4 = new Tree(4); 
Tree t2 = new Tree(2); 
Tree t1 = new Tree(1); 
Tree t3 = new Tree(3); 
Tree t5 = new Tree(5); 

t4.left = t2; 
t4.right = t5; 

t2.left = t1; 
t2.right = t3; 

// Prints "Height : 2" for Code 2 
// Prints "Height : 3" for Code 1 
System.out.println("Height : " + findHeight(t4)); 

मैं उलझन में हूँ

सभी: एड अन्य अतः जवाब में से कई क्योंकि प्रति संहिता के रूप में ऊंचाई की गणना 1

विरोधाभासी लॉजिक्स


अद्यतन के लिए तर्क से पता चलता , मुझे एक बुनियादी संदेह है कि सटीक क्या है पेड़ की ऊंचाई ly?

1. क्या यह जड़ के रूट और गहरे नोड (दोनों रूट - & गहरे नोड) के बीच नोड्स का कोई नहीं है?

2. क्या यह पेड़ के रूट और गहरे नोड के बीच किनारों का कोई नहीं है?

या

3. यह हर व्यक्ति के कार्यान्वयन की सिर्फ बात है - दोनों दृष्टिकोण सही हैं?

+0

लेकिन कोई सवाल नहीं है .. – Maroun

+0

अद्यतन की जांच करें! – tmgr

+0

यह एक पूरी तरह से मनमानी परिभाषा है। क्या आप चाहते हैं कि ऊंचाई किनारों की संख्या या नोड्स की संख्या हो? जब तक आप लगातार हों, तब तक सब कुछ काम करेगा। – Teepeemm

उत्तर

5

अंतर सब में निहित की है Wikipedia के अनुसार यदि एक खाली वृक्ष की ऊंचाई -1 या 0.

है :

नोड की ऊंचाई उस नोड के पत्ते के सबसे लंबे समय तक नीचे की लंबाई की लंबाई है। जड़ की ऊंचाई पेड़ की ऊंचाई है। नोड की गहराई इसकी जड़ के मार्ग की लंबाई है (यानी, इसका रूट पथ)।

और

रूट नोड गहराई शून्य है, पत्र-गांठ ऊंचाई शून्य है, और केवल एक ही नोड (इसलिए दोनों एक रूट और पत्ती) के साथ एक पेड़ गहराई और ऊंचाई शून्य है। परंपरागत रूप से, एक खाली पेड़ (बिना किसी नोड वाले पेड़, यदि अनुमति है) गहराई और ऊंचाई -1 है।

तो आप सही हो सकते हैं - दूसरा इस बारे में सहमत है।

बेशक, ये सभी परिभाषाएं हैं - मैं पहले संस्करण के साथ सहमत होने वाली परिभाषा को देखने के लिए बहुत आश्चर्यचकित नहीं हूं।

+0

मेरे अपडेट की जांच करें! – tmgr

+0

पथ की लंबाई किनारों की गिनती है, इसलिए मैं कहूंगा 2. –

+0

लेकिन, कोड 1 के अनुसार, जो कई SO उपयोगकर्ता कहते हैं (जॉन स्कीट समेत) http://stackoverflow.com/q/5763854/2546848 , जिसके परिणामस्वरूप मेरे उपरोक्त कोड के लिए गलत जवाब होगा .. है ना? – tmgr

0

आपका उदाहरण ऊंचाई 3 है (टी 4 एक रूट है, t4.left टी 2 है, टी 2. बाएं टी 1 है) यदि आपकी ऊंचाई की समझ है (1 रूट नोड ऊंचाई 1 है, एक बच्चे के साथ रूट नोड या दो ऊंचाई 2, आदि)

t4.left = t2; 
t4.right = t5; 

t2.left = t1; 
t2.right = t3; 

तो कोड 1 सही है :))

+0

मेरे अपडेट की जांच करें! – tmgr

+0

दूसरा एक सत्य है, लेकिन कई स्थितियों के लिए डेवलपर ऊंचाई को लागू करते समय पहले व्यक्ति के साथ जाते हैं। तो जवाब 3 है :)) – Tala

0

कोड 0 रूट को ऊंचाई 1 के रूप में गिना जाएगा (रूट 0 होना चाहिए)। जिसका मतलब है कि सभी बाद के पेड़ एक बहुत अधिक

संबंधित मुद्दे