字符串转二叉树

简介: 字符串转二叉树

一. 题目介绍


ceb8e1b1d36d4d3e92b0d86e669f0f18.png


二. 题目分析


首先


题目让我们以先序遍历的方式用字符串建立一个二叉树


输入是一个字符串


输出是是以中序遍历二叉树打印


我们先来看最简单的输入


这里只要建立一个字符数组 然后等测试用例输入就好了


    // 接受输入值
    char arr[100]={0};
    scanf("%s",arr);


代码表示如上


之后我们再开始创建二叉树


5740c290d45c4beda71a3ca2ff37df61.png


我们可以看到 它是先序遍历


所以说我们要用先序遍历的方式来创建二叉树


我们先来创建二叉树的结构体


代码表示如下


typedef struct BinaryTree
{
    struct BinaryTree* left;
    struct BinaryTree* right;
    char val;
}BT;


之后我们开始写创建二叉树的代码(前序)


BT* BinaryTreeCreate(char* arr , int i)
{
    //如果是#返回空
    if(arr[i]=='#')
    {
        i++;
        return NULL;
    }
    // 否则就创建一个新的节点 
    BT* newnode = (BT*)malloc(sizeof(struct BinaryTree));
    newnode->val= arr[i];
    i++;
    newnode->left = BinaryTreeCreate(arr, i);
    newnode->right = BinaryTreeCreate(arr, i); 
   return newnode;
}


但是我们这样子的代码对吗?


显然是不对的


因为这个时候我们使用的i是传值传递的


所以说这里一定会存在问题


我们这个时候需要使用指针来接受i的值


BT* BinaryTreeCreate(char* arr , int* pi)
{
    //如果是#返回空
    if(arr[*pi]=='#')
    {
        (*pi)++;
        return NULL;
    }
    // 否则就创建一个新的节点 
    BT* newnode = (BT*)malloc(sizeof(struct BinaryTree));
    newnode->val= arr[*pi];
    (*pi)++;
    newnode->left = BinaryTreeCreate(arr, pi);
    newnode->right = BinaryTreeCreate(arr, pi); 
    return newnode;
}


这样子就可以了


之后我们开始中序遍历打印


void Inorder(BT* root)
{
    // 首先考虑极限情况
    if(root==NULL)
    {
        return;
    }
    // 之后开始中序遍历 
    Inorder(root->left);
    printf("%c ",root->val);
    Inorder(root->right);
}


三. 所有代码


#include <stdio.h>
#include <stdlib.h>
typedef struct BinaryTree
{
    struct BinaryTree* left;
    struct BinaryTree* right;
    char val;
}BT;
void Inorder(BT* root)
{
    // 首先考虑极限情况
    if(root==NULL)
    {
        return;
    }
    // 之后开始中序遍历 
    Inorder(root->left);
    printf("%c ",root->val);
    Inorder(root->right);
}
BT* BinaryTreeCreate(char* arr , int* pi)
{
    //如果是#返回空
    if(arr[*pi]=='#')
    {
        (*pi)++;
        return NULL;
    }
    // 否则就创建一个新的节点 
    BT* newnode = (BT*)malloc(sizeof(struct BinaryTree));
    newnode->val= arr[(*pi)++];
    newnode->left = BinaryTreeCreate(arr, pi);
    newnode->right = BinaryTreeCreate(arr, pi); 
    return newnode;
}
int main()
{
    // 接受输入值
    char arr[100]={0};
    scanf("%s",arr);
    // 建立二叉树
    int i = 0;
    BT* root = BinaryTreeCreate(arr, &i); 
    // 中序遍历打印二叉树
    Inorder(root);
    return 0;
}
相关文章
|
安全 数据安全/隐私保护
BUUCTF---wireshark1
BUUCTF---wireshark1
|
SQL 存储 测试技术
企业销售管理系统的设计与实现(论文+源码)_kaic
企业销售管理系统的设计与实现(论文+源码)_kaic
|
数据库 关系型数据库 存储
深度 | 解读POLARDB v2.0 Oracle 兼容特性
此次发布的POLARDB Oracle兼容版,是业界首款兼容Oracle数据库的云原生数据库,可帮助企业平滑地将传统数据库上的业务迁移上云。
2896 0
|
3天前
|
云安全 数据采集 人工智能
古茗联名引爆全网,阿里云三层防护助力对抗黑产
阿里云三层校验+风险识别,为古茗每一杯奶茶保驾护航!
古茗联名引爆全网,阿里云三层防护助力对抗黑产
|
3天前
|
存储 机器学习/深度学习 人工智能
大模型微调技术:LoRA原理与实践
本文深入解析大语言模型微调中的关键技术——低秩自适应(LoRA)。通过分析全参数微调的计算瓶颈,详细阐述LoRA的数学原理、实现机制和优势特点。文章包含完整的PyTorch实现代码、性能对比实验以及实际应用场景,为开发者提供高效微调大模型的实践指南。
499 1
kde
|
3天前
|
人工智能 关系型数据库 PostgreSQL
n8n Docker 部署手册
n8n是一款开源工作流自动化平台,支持低代码与可编程模式,集成400+服务节点,原生支持AI与API连接,可自托管部署,助力团队构建安全高效的自动化流程。
kde
334 3
|
3天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
本文介绍RAG(检索增强生成)技术,结合Spring AI与本地及云知识库实现学术分析AI应用,利用阿里云Qwen-Plus模型提升回答准确性与可信度。
231 91
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践