2012-11-01 15 views
7

मैं स्तर के क्रम में एक द्विआधारी खोज वृक्ष मुद्रित करने के लिए निम्न कोड लागू किया है।मुद्रण स्तरीय आदेश द्विआधारी खोज वृक्ष प्रारूपण

public void printLevelOrder(int depth) { 
    for (int i = 1; i <= depth; i++) { 
     printLevel(root, i); 
    } 
} 

public void printLevel(BinaryNode<AnyType> t, int level) { 
    if (t == null) { 
     return; 
    } 
    if (level == 1) { 
     System.out.print(t.element); 
    } else if (level > 1) { 
     printLevel(t.left, level - 1); 
     printLevel(t.right, level - 1); 
    } 
} 

मैं यह पता लगाने की कोशिश कर रहा हूं कि यह एक निश्चित प्रारूप में प्रिंट करने के लिए मेरे कोड को कैसे सुधारें।

उदाहरण के लिए, एक पेड़ दिया

1 
/\ 
    2 3 
//\ 
4 5 6 

वर्तमान में यह तो जैसे प्रिंट:

123456 

मैं इस प्रकार उसका प्रिंट ले रहा हूँ:

Level 0: 1 
Level 1: 2 3 
Level 2: 4 5 6 
+0

समारोह 'printLevel' बजाय इसे तुरंत मुद्रण के एक स्ट्रिंग के रूप में वापस नोड संख्या करते हैं। फिर, आप इन स्ट्रिंग्स को अपने इच्छित प्रारूप में जोड़ सकते हैं। – Aziz

उत्तर

11

के बजाय रिकर्सिव फ़ंक्शन कॉल के अंदर तुरंत मूल्यों को प्रिंट करना, मानों को पकड़ने के लिए स्ट्रिंग का उपयोग करें। इससे उत्पादन में हेरफेर करना आसान हो जाएगा।

public void printLevelOrder(int depth) { 
    for (int i = 1; i <= depth; i++) { 
     System.out.print("Level " + (i-1) + ": "); 
     String levelNodes = printLevel(root, i); 
     System.out.print(levelNodes + "\n"); 
    } 
} 

public String printLevel(BinaryNode<AnyType> t, int level) { 
    if (t == null) { 
     return ""; 
    } 
    if (level == 1) { 
     return t.element + " "; 
    } else if (level > 1) { 
     String leftStr = printLevel(t.left, level - 1); 
     String rightStr = printLevel(t.right, level - 1); 
     return leftStr + rightStr; 
    } 
    else // you need this to get it to compile 
     return ""; 
} 

आउटपुट:

Level 0: 1 
Level 1: 2 3 
Level 2: 4 5 6 
+0

धन्यवाद। इससे बहुत मदद मिली! – ILostMySpoon

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