二叉树建立及其先序遍历

题目描述

按先序遍历顺序输入二叉树的各个结点值,采用二叉链表的存储结构存储该二叉树,并按先序遍历输出二叉树的各结点的值及深度。

输入格式

按先序遍历顺序输入二叉树的各个结点值,其中 # 表示空节点。

数据保证字符串长度不超过 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;  
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值