重点是打印二叉树,例如:
-------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");
}
}
这适用于 LENGTH 值 4、8、16,但当您尝试 32、64 等时,它有一些杂散的 X。例如:
长度 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
这一定是某个地方的简单修复,但我就是看不到它。希望有人可以。
最佳答案
char array[lines][LENGTH];
这将创建一个空数组,其中每个值都是当前内存中的任何值(有时为 0,但不保证为 0)。这意味着有时随机地,内存中已经包含一个“X”字节。您可以通过将数组初始化为全 0(即空字符,而不是“0”)来解决此问题:
memset(array, 0, LENGTH * lines);
或者:
for(size_t i = 0; i < lines; i++){
for(size_t j = 0; j < LENGTH; j++){
a[i][j] = 0;
}
}
关于c - 递归二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13299659/