题目描述
按先序遍历顺序输入二叉树的各个结点值,采用二叉链表的存储结构存储该二叉树,并按先序遍历输出二叉树的各结点的值及深度。
输入格式
按先序遍历顺序输入二叉树的各个结点值,其中 #
表示空节点。
数据保证字符串长度不超过 6060。
输出格式
输出该二叉树的先序遍历序列,并在每个节点后输出它在树中的深度。
样例输入 #1
复制
ABD##E##C##
样例输出 #1
A(1)B(2)D(3)E(3)C(2)
源代码
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建二叉树
TreeNode* createTree() {
char ch;
scanf(" %c", &ch); // 注意前面的空格,用于跳过任何空白字符
if (ch == '#') {
return NULL;
}
TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = ch;
root->left = createTree();
root->right = createTree();
return root;
}
// 先序遍历并输出节点值和深度
void preorderTraversal(TreeNode* root, int depth) {
if (root == NULL) {
return;
}
printf("%c(%d)", root->data, depth);
if (root->left || root->right) { // 如果不是叶子节点,则输出空格
printf("");
}
preorderTraversal(root->left, depth + 1);
preorderTraversal(root->right, depth + 1);
}
int main() {
TreeNode *root = createTree();
preorderTraversal(root, 1); // 从根节点开始,深度为1
printf("\n");
return 0;
}