Files
2020-02-18 03:32:06 +08:00

77 lines
1.3 KiB
C

/*===================================
* 树的二叉链表(孩子-兄弟)结构存储表示
====================================*/
#include "CSTree.h"
int count = 0;
/*
* 初始化
*
* 构造空树。
*/
Status InitTree(CSTree* T) {
if(T == NULL) {
return ERROR;
}
*T = NULL;
return OK;
}
/*
* 判空
*
* 判断树是否为空树。
*/
Status TreeEmpty(CSTree T) {
return T == NULL ? TRUE : FALSE;
}
/*━━━━━━━━━━━━━━━━━━━━━━ 图形化输出 ━━━━━━━━━━━━━━━━━━━━━━*/
// 以图形化形式输出当前结构
void PrintTree(CSTree T) {
// 遇到空树则无需继续计算
if(TreeEmpty(T)) {
printf("\n");
return;
}
Print(T, 0);
printf("\n");
}
// 图形化输出当前结构内部实现
static void Print(CSTree T, int row) {
int k;
if(T == NULL) {
return;
}
if(row==0) {
printf("\n第 %d 棵树...\n", ++count);
}
// 访问当前结点
printf("%c ", T->data);
Print(T->firstchild, row + 1);
if(T->nextsibling != NULL) {
printf("\n");
for(k = 0; k < row; k++) {
printf(". ");
}
Print(T->nextsibling, row);
}
}