2012-11-08 225 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; 
    } 
}