题目:
编写一个递归算法,将二叉树输出为字符串。该字符串的格式定义如下:
1、如果二叉树为空,则对应的字符串为空串;
2、如果某个非终端节点的某棵子树为空,则使用 '#' 字符表示;
3、对于叶子结点,其左、右子树无需使用任何字符表示;
4、如果某结点存在子树,则将子树放置于括号()内,左子树与右子树之间用逗号 ‘,’隔开;
5、该字符串以'\0'结尾。
二叉树定义如下:
typedef struct BiTNode {
TElemType data; // 数据域
struct BiTNode *lchild, *rchild; // 左、右孩子指针
} BiTNode, *BiTNode;
实现:(注意要包含 #include <string.h>)
// 递归将二叉树转化为字符串
void BiTreeString(BiTree T, char *str) {
if (T == NULL) {
strcat(str, "#"); // strcat : 字符串拼接函数
return;
}
strncat(str, &T->data, 1);
if (T->lchild != NULL || T->rchild != NULL) {
strcat(str, "(");
BiTreeString(T->lchild, str);
strcat(str, ",");
BiTreeString(T->rchild, str);
strcat(str, ")");
}
}
// 将二叉树转化为字符串
char *BiTree2String(BiTree T) {
char *str = (char *)malloc(sizeof(char) * 1000);
memset(str, 0, sizeof(char) * 1000); // 初始化函数,作用为将某一块内存中的全部设置为指定的值
BiTreeString(T, str);
return str;
}