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

这棵树的结构为

运行效果

相关推荐
Q一件事几秒前
结构方程相关
python·算法·机器学习
yugi987838几秒前
兰伯特问题求解的MATLAB实现
开发语言·算法·matlab
小年糕是糕手2 分钟前
【35天从0开始备战蓝桥杯 -- Day4】
数据结构·c++·算法·leetcode·蓝桥杯
xiaoye-duck2 分钟前
《算法题讲解指南:递归,搜索与回溯算法--递归》--1.汉诺塔,2.合并两个有序链表
数据结构·c++·算法
故以往之不谏4 分钟前
算法专题--数组二分查找--Leetcode704题
c语言·开发语言·c++·算法·新人首发
C+-C资深大佬9 分钟前
C++ 模板进阶
开发语言·c++·算法
努力中的编程者11 分钟前
栈和队列(C语言底层实现栈)
c语言·开发语言·数据结构·c++
无尽的罚坐人生11 分钟前
hot 100 98. 验证二叉搜索树
算法·leetcode
liu-yonggang24 分钟前
ROS2 性能优化与功能增强方案
大数据·算法·性能优化
Alsian25 分钟前
Day41 TensorBoard
人工智能·算法·机器学习