2012-11-01 102 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