mirror of
https://github.com/kangjianwei/Data-Structure.git
synced 2026-02-07 17:01:51 +08:00
77 lines
1.3 KiB
C
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);
|
|
}
|
|
}
|