构建二叉树和遍历

二叉树的构建及遍历二叉树OJ

使用C语言构建二叉树其实只要思路清晰是很简单的
在这里插入图片描述
我们这里看一下题目根据题目可以判断,是让我们输入一串字符串然后构建一棵二叉树,最后用中序遍历,那么我们该怎么做呢?
首先我们需要先有一个二叉树的结构

struct BTNode{
    int val;
    struct BTNode* left;
    struct BTNode* right;
};

这样二叉树的结构就构建完成啦
接下来我们看看怎么构建二叉树呢?
**“ABC##DE#G##F###”**这样一串字符串我们需要把他构建成一棵二叉树,#的地方为空
所以这里我们使用一个if的条件判断,通过遍历这个字符串来一个个的将元素插入二叉树。
但是这里我们要注意的是,即使读到字符串中的‘#’我们也要往后遍历这个字符串。
这里我们可以先这样写

    if(a[*pi]=='#')
    {
        (*pi)++;
        return NULL;
    }

走到后面说明读到了非#那么我们就需要将他插入二叉树中,这里我们需要使用malloc创建一个节点。

    BTNode* root = (BTNode*)malloc(sizeof(BTNode)); //这里是创建节点
    root->val = a[*pi];     //将数组中的值赋给节点
    (*pi)++;                //数组元素++
    root->left=BinaryTreeCreate(a,pi);  //递归建立树
    root->right=BinaryTreeCreate(a,pi);
    return root;

创建了一个节点,在使用递归的方式将这些节点串起来构建二叉树。
最后这里我们在写一个中序的遍历

BTNode* Inodrder(BTNode* root)
{
    if(root==NULL)
    return NULL;
    Inodrder(root->left);
    printf("%c ",root->val);
    Inodrder(root->right);
    return root;
}

中序遍历就很简单了
这里我们在使用一个main函数将他们串在一起

#include <stdio.h>
#include <stdlib.h>
typedef struct BTNode BTNode;
struct BTNode{
    int val;
    struct BTNode* left;
    struct BTNode* right;
};

BTNode* BinaryTreeCreate(char* a, int* pi)
{
    if(a[*pi]=='#')
    {
        (*pi)++;
        return NULL;
    }
    BTNode* root = (BTNode*)malloc(sizeof(BTNode));
    root->val = a[*pi];
    (*pi)++;
    root->left=BinaryTreeCreate(a,pi);
    root->right=BinaryTreeCreate(a,pi);
    return root;
}

BTNode* Inodrder(BTNode* root)
{
    if(root==NULL)
    return NULL;
    Inodrder(root->left);
    printf("%c ",root->val);
    Inodrder(root->right);
    return root;
}

int main() {
    char arr[100];
    scanf("%s",arr);
    int i = 0;
    BTNode* tree = BinaryTreeCreate(arr,&i);
    Inodrder(tree);
    return 0;
}

这样我们就轻松的拿下了这个二叉树的建立及遍历。喜喜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值