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);
}

这棵树的结构为

运行效果

相关推荐
算法歌者5 分钟前
[算法]入门1.矩阵转置
算法
林开落L20 分钟前
前缀和算法习题篇(上)
c++·算法·leetcode
远望清一色21 分钟前
基于MATLAB边缘检测博文
开发语言·算法·matlab
tyler_download23 分钟前
手撸 chatgpt 大模型:简述 LLM 的架构,算法和训练流程
算法·chatgpt
SoraLuna43 分钟前
「Mac玩转仓颉内测版7」入门篇7 - Cangjie控制结构(下)
算法·macos·动态规划·cangjie
我狠狠地刷刷刷刷刷1 小时前
中文分词模拟器
开发语言·python·算法
鸽鸽程序猿1 小时前
【算法】【优选算法】前缀和(上)
java·算法·前缀和
九圣残炎1 小时前
【从零开始的LeetCode-算法】2559. 统计范围内的元音字符串数
java·算法·leetcode
YSRM1 小时前
Experimental Analysis of Dedicated GPU in Virtual Framework using vGPU 论文分析
算法·gpu算力·vgpu·pci直通
iiiiiankor1 小时前
C/C++内存管理 | new的机制 | 重载自己的operator new
java·c语言·c++