C语言使用先序遍历创建二叉树

复制代码
#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
    int data;
    struct node * left;
    struct node * right;
} Node;

Node * createNode(int val);
Node * createTree();
void freeTree(Node * node);

void preOrder(Node * node);

// 先序创建二叉树
int main() {

    Node * root = createTree();
    preOrder(root);
    freeTree(root);
    return 0;
}

Node * createNode(int val) {
    Node * node = (Node *)malloc(sizeof(Node));
    if (node == NULL)
    {
        printf("内存申请异常");
        exit(-1);
    }
    node->data = val;
    node->left = NULL;
    node->right = NULL;
    return node;
}

Node * createTree() {
    int val = 0;
    printf("请输入创建树的数据 0为NULL:");
    scanf("%d", &val);
    if (val == 0)
    {
        return NULL;
    }

    Node * node = createNode(val);
    printf("请输入%d的左子节点:", val);
    node->left = createTree();
    printf("请输入%d的右子节点:", val);
    node->right = createTree();

    return node;
}

void preOrder(Node * node) {
    if (node == NULL)
    {
        return;
    }
    
    printf("%d ", node->data);
    preOrder(node->left);
    preOrder(node->right);
}

void freeTree(Node * root) {
    if (root == NULL)
    {
        return;
    }

    freeTree(root->left);
    freeTree(root->right);
    free(root);
}

这棵树的结构为

运行效果

相关推荐
晓蛋1 天前
c语言指的是什么意思
c语言·编译器·编程开发·集成开发环境·程序实例
倒头就睡的小比特1 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
傲世仙尊1 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
牵猫散步的鱼儿1 天前
重载、重写(覆盖)、重定义区别
c语言
猎头南楼1 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
phltxy1 天前
C 语言指针:从内存地址到灵活的数据访问
c语言
m0_547486661 天前
《数据结构教程》全套 PPT课件2026
数据结构
phltxy1 天前
C 语言中的数据存储:从类型到二进制位
c语言
旖旎夜光1 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控