2012-11-01 27 views
7

Tôi đã triển khai mã sau đây để in cây tìm kiếm nhị phân theo thứ tự cấp.Thứ tự cấp bậc in Tìm kiếm nhị phân Định dạng cây

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); 
    } 
} 

Tôi đang cố gắng tìm hiểu cách cải thiện mã của mình để in ra ở định dạng nhất định.

Như một ví dụ, cho một cây

1 
/\ 
    2 3 
//\ 
4 5 6 

Hiện nay nó in như vậy:

123456 

Tôi đang tìm nó để in như sau:

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

Hãy để chức năng 'printLevel' trả về số nút như là một chuỗi thay vì in nó ngay lập tức. Sau đó, bạn có thể ghép các chuỗi này theo bất kỳ định dạng nào bạn muốn. – Aziz

Trả lời

11

Thay vì in các giá trị ngay trong các cuộc gọi hàm đệ quy, sử dụng các chuỗi để giữ các giá trị. Điều này sẽ giúp dễ dàng thao tác đầu ra hơn.

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 ""; 
} 

Output:

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

Cảm ơn bạn. Điều này đã giúp rất nhiều! – ILostMySpoon

Các vấn đề liên quan