二叉树的构建及遍历

欢迎大家来到我的博客,给生活加点impetus!!
在这里插入图片描述
让我们进入《题海探骊》,感受算法之美!!

二叉树的构建及遍历

题目链接

在线OJ

题目详解

在这里插入图片描述
在这里插入图片描述
我们理清了题目部分,再来看代码部分:
在这里插入图片描述

这代表在该题目中所有部分都需要我们自己实现

不同于leetcode,leetcode大部分二叉树例题结构等系统自己就实现好了。

思路

创建数组读取用户输入的字符串->创建二叉树->中序遍历二叉树

为什么会想到创建数组读取用户输入呢?

因为是一串字符串,使用数组这种数据结构简洁高效
已知输入数据大小小于100

代码实现

因为二叉树结构定义,中序遍历和创建结点我们在上一节已经讲解,不懂的小伙伴可以移步二叉树常见方法的实现
我们重点来讲解二叉树依靠数组创建
在这里插入图片描述
当我们实现好二叉树结点创建后:
我们来实现二叉树的创建。
在这里插入图片描述

为什么需要传size的地址:
因为每一次函数递归都会创建新的函数栈帧size也会有多个,在每个函数中都有函数栈帧,地址不同,size不会发生变化,只有传地址,才会对同一个size进行数据操作

我们来看一下全部代码:

#include <stdio.h>
#include<stdlib.h>
typedef struct BinaryTreeNode{
    char data;
    struct BinaryTreeNode*left;
    struct BinaryTreeNode*right;
}BTNode;
BTNode* BuyNode(char x)
{
    BTNode*node=(BTNode*)malloc(sizeof(BTNode));
    if(node==NULL)
    {
        perror("malloc failed!!");
        exit(1);
    }
    node->data=x;
    node->left=node->right=NULL;

    return node;
}
BTNode* CreatBinaryNode(char*arr,int* pi)
{
    if(arr[(*pi)]=='#')
    {
        (*pi)++;
        return NULL;
    }
    BTNode* root=BuyNode(arr[(*pi)]);
    (*pi)++;
    root->left=CreatBinaryNode(arr,pi);
    root->right=CreatBinaryNode(arr,pi);

    return root;
}
void InOrder(BTNode*root)
{
    if(root==NULL)
    {
        return;
    }
    InOrder(root->left);
    printf("%c ",root->data);
    InOrder(root->right);
}
int main() {
    //根据用户输入的字符串存储在数组中
    char arr[100];
    scanf("%s",&arr[0]);
    //将数组中的数据创建树
    int i=0;
    BTNode* root=CreatBinaryNode(arr,&i);
    //中序遍历
    InOrder(root);
    return 0;
}

我们今天学到的主要是通过数组来创建二叉树

结语

感谢大家认真阅读我的博客,希望能有更优的方法与我交流!! 乘舟侧畔千帆过,病树前头万木春!!道路坎坷,请保持希望!!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值