- 首先,需要一个数组来作为显示的缓存,我们选取buffer[6][128]这样一个缓存,因此最大只能显示6层的树。将buffer中的元素全部初始化为INF
- 统计出树的高度,从1开始计数。
- 采用中序遍历的方法在缓存中打印树。采用一个全局变量 x 来记录应该在哪个横坐标处打印。每次打印一个数都++,每次遇见NULL则x = x + pow(2, height-level) - 1. 至于纵坐标则采用递归参数level来控制。
- 将buffer打印出来,INF打印为空格,数字正常打印。
相关代码如下:
#define MAX(a,b) (((a)>(b))?(a):(b))
using namespace std;
typedef struct Node{
int value;
struct Node* left;
struct Node* right;
}Node, *BinaryTree;
int PrintTree_h_height;
char PrintTree_h_buffer[6][128];
int PrintTree_h_x;
int PrintTree_h_treeHeight(BinaryTree tree){
if (tree == NULL) return 0;
int heightLeft = PrintTree_h_treeHeight(tree->left);
int heightRight = PrintTree_h_treeHeight(tree->right);
return MAX(heightLeft, heightRight) + 1;
}
void PrintTree_h_corePrintTree(BinaryTree tre