2012-11-08 341 views
0

點是打印二叉樹如:遞歸二叉樹

-------x-------- 
---x-------x---- 
-x---x---x---x-- 
x-x-x-x-x-x-x-x- 
xxxxxxxxxxxxxxxx 

我的代碼是:

#include <stdio.h> 
#include <math.h> 

#define LENGTH 16 

void makeBranches(int left, int right, char a[][LENGTH], int); 
void display(char a[][LENGTH], int); 

void main(){ 
    int i, lines; 
    double a; 

    a = log10(LENGTH*2)/log10(2); 
    lines = (int)a; 
    char array[lines][LENGTH]; 

    makeBranches(0, LENGTH-1, array, 0); 
    display(array, lines); 
} 

void makeBranches(int left, int right, char a[][LENGTH], int line){ 

    if(left >= right){ 
    a[line][left] = 'X'; 
    return; 
    } else{ 
    a[line][(right+left)/2] = 'X'; 
    makeBranches(left, (right+left)/2, a, line+1); 
    makeBranches((right+left)/2+1, right, a, line+1); 
    } 
} 

void display(char a[][LENGTH], int lines){ 
    int i, j; 

    for(i = 0; i < lines; i++){ 
    for(j = 0; j < LENGTH; j++){ 
     if(a[i][j] == 'X') 
    printf("%c", a[i][j]); 
     else 
    printf("-");  
    } 
    printf("\n"); 
    } 
} 

這工作正常的4,8,16長度值,但是當你嘗試32,64等等,它有一些流浪的X's。例如:

長度32

---------------X----X-------X--- 
-------X---------------X-------- 
---X-------X-------X-------X---- 
-X---X---X---X---X---X---X---X-- 
X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X- 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 

長度64

-------------------------------X-------------------------------- 
---------------X-------------------------------X---------------- 
-------X---------------X---------------X---------------X-------- 
---X-------X-------X-------X-------X-------X-------X-------X---- 
-X---X---X---X---X--XX---X--XX---X---X---X---X---X---X---X---X-- 
X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X- 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 

這一定是一個簡單的修補的地方,但我無法看到它。希望有人能。

+0

我跑過你的程序,一切正常。我沒有看到任何流浪的'X'。 – Yamaneko

+3

你正在初始化'array'中的非X值嗎? –

回答

3
char array[lines][LENGTH]; 

創建一個空的陣列,其中每一個值是目前無論是在存儲器(這有時是0,但不保證是)。這意味着有時候,內存將隨機包含一個「X」字節。

memset(array, 0, LENGTH * lines); 

或者:您可以通過初始化數組是全0的(這是空字符,而不是「0」)解決這個

for(size_t i = 0; i < lines; i++){ 
    for(size_t j = 0; j < LENGTH; j++){ 
     a[i][j] = 0; 
    } 
}