字符串转二叉树

news2024/11/20 15:34:27

一. 题目介绍

在这里插入图片描述

二. 题目分析

首先

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

输入是一个字符串

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

我们先来看最简单的输入

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

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

代码表示如上

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

在这里插入图片描述
我们可以看到 它是先序遍历

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

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

代码表示如下

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络原理 --- 传输层Ⅳ TCP协议中的延迟应答、捎带应答、面向字节流、TCP中的异常处理

文章目录网络原理传输层TCP协议7.延迟应答8.捎带应答9. 面向字节流10.TCP中的异常处理总结网络原理 介绍TCP/IP协议中每一层里面的核心内容~ 应用层传输层网络层数据链路层物理层 传输层TCP协议 7.延迟应答 提高传输效率的机制 又是基于流量控制,来引入的提高效率的机制 实…

数据在内存中的存储

目录 数据在内存中的存储&#xff1a;&#xff1a; 整型及其浮点型存储方式: 1.数据类型介绍 2.整形在内存中的存储&#xff1a;原码 反码 补码 3.大小端字节序介绍及判断 4.浮点型在内存中的存储 5.两道经典指针选择题 C语言编程训练(牛客网) 1.喝汽水问题 2.字符串逆序 3.打…

Python编程运算符 ——算数运算符

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.运算符 1.在Python运算符中分为 2.算数运算符 3.比较重要的运算符 4…

网络原理——No.1 传输层_TCP的确认应答机制与超时重传

JavaEE传送门JavaEE JavaEE——网络原理_应用层 网络原理——传输层_UDP 目录传输层TCPTCP 的基本特性确认应答机制超时重传传输层 端到端之间的传输, 重点关注的是起点和终点 核心的协议有两个: UDP: 无连接, 不可靠传输,面向数据报, 全双工 TCP: 有链接, 可靠传输, 面向字…

黑猫带你学UFS协议第11篇:什么是逻辑单元(LU)与逻辑块(Sector)

本文依据UFS3.1 JEDEC协议及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,已加入原创维权,禁止私自转载。 文章所在专栏:《黑猫带你学:UFS协议详解》 1 LU简介 我们对与UFS、emmc一类存储芯片,最重要的功能是什么?无非就是存数据和取出数据,也…

神经网络的输入稀疏矩阵,神经网络中的矩阵运算

1、BP神经网络模型各个参数的选取问题 样本变量不需要那么多&#xff0c;因为神经网络的信息存储能力有限&#xff0c;过多的样本会造成一些有用的信息被丢弃。如果样本数量过多&#xff0c;应增加隐层节点数或隐层数目&#xff0c;才能增强学习能力。 一、隐层数 一般认为&am…

牛客前端刷题(九)—— 打包篇

还在担心面试不通过吗&#xff1f;给大家推荐一个超级好用的刷面试题神器&#xff1a;牛客网&#xff0c;里面涵盖了各个领域的面试题库&#xff0c;还有大厂真题哦&#xff01; 赶快悄悄的努力起来吧&#xff0c;不苒在这里衷心祝愿各位大佬都能顺利通过面试。 面试专栏分享&a…

greenplum 源码解析 FTS辅助进程--ReadMe

简介 在greenplum数据库中master节点有一个专属进程Fault Tolerance Service (FTS: 容错服务)&#xff0c;其主要功能是检测所有segment节点的健康信息&#xff0c;如果其检测到segment节点的primary出现异常[硬件故障/宕机]&#xff0c;会在第一时间将其对应的mirror提升为新的…

MySql(50)MySQL日志

文章目录MySQL支持的日志日志类型日志的弊端慢查询日志(slow query log)通用查询日志查看当前状态启动日志永久启动临时启动查看日志删除\刷新日志错误日志(error log)删除\刷新日志二进制日志(bin log)查看默认情况日志参数设置查看日志使用日志恢复数据删除二进制日志PURGE M…

vue3 响应式对象的 api ,你全用过了吗?

文章目录Ⅰ. ref、reactive ( 递归监听 )Ⅱ. isRef、isReactive ( 判断 )Ⅲ. toRef 和 toRefs ( 解构 )Ⅳ. toRaw 、 markRaw ( 解除代理)Ⅴ. unref ( 拷贝 )Ⅵ. shallowRef 、shallowReactive&#xff08; 非递归监听 &#xff09;Ⅶ. triggerRef &#xff08;强制更新&#x…

红黑树原理及旋转

红黑树&#xff0c;本质上来说就是一棵二叉查找树 但它在二叉查找树的基础上增加了着色和相关的性质使得红黑树相对平衡 保证了红黑树的查找、插入、删除的时间复杂度最坏为O(log n) 但它是如何保证一棵n个结点的红黑树的高度始终保持在h logn的呢&#xff1f;这就引出了红黑…

相似度_对抗学习:SimCSE: Simple Contrastive Learning of Sentence Embeddings

SimCSE: Simple Contrastive Learning of Sentence Embeddings 这篇论文&#xff0c;我觉得有意思。在创造对抗学习的正负例时&#xff0c;正例直接使用它本身。将同一个句子传递给预先训练好的编码器两次&#xff1a;通过应用两次dropout&#xff0c;我们可以得到两个不同的嵌…

云计算基础:云计算越来越广泛,我们应该如何去学习云计算

随着时代的发展&#xff0c;云计算越来越普及&#xff0c;越大众化&#xff0c;使用的人越来越多&#xff0c;我们应该如何去学习这门技术呢?这篇文章我们就来介绍如何学习我们的云计算。 学前介绍&#xff1a; 学前介绍 学习资料&#xff1a;HedEX Lite、产品文档、笔记、P…

非科班程序员被裁员后反而涨薪了200%,这两个月他都经历了哪些?

今年年初开始&#xff0c;裁员潮一浪接着一浪翻滚而来&#xff0c;让互联网人胆颤心惊&#xff0c;时刻担心下一波裁员是否就要降临到自己身上。 小帅&#xff08;化名&#xff09;是一个原本月薪8k&#xff0c;在小外包公司做政府项目的一名普通员工&#xff0c;前不久就被裁员…

数据仓库建模(四):维度表的设计

数据仓库建模&#xff08;四&#xff09;&#xff1a;维度表的设计一、维度表的整体结构1.1 维度表的结构设计1.2 维度代理键1.3 自然键、超久键和超自然键1.4 下钻与上卷1.5 维度退化1.6 非规范化的扁平维度1.7 多层次维度1.8 维度属性的标识与状态信息1.9 维度表中的空值属性…

趣学算法(2)

14天阅读挑战赛 目录前言一 几类时间复杂度二 兔子数列1.问题分析2.方法13.方法24.方法3最后前言 这篇文章是《趣学算法》的读书笔记&#xff0c;也对数据结构与算法的初步介绍&#xff0c;阅读这篇文章&#xff0c;我会带你改进一个算法。 一 几类时间复杂度 常见的算法时间复…

Vue项目的记录(十三)

1.登录注册静态组件 assets这个文件夹放所有的组件公用的静态资源 在样式当中也可以使用符号&#xff0c;&#xff08;src目录的别名&#xff09;&#xff0c;要注意的是在前面你加上~ 2.注册业务 这里的验证码&#xff0c;正常来说应该是要后台发送到用户手机上&#xff0c…

拓端tecdat|R语言辅导配对检验分析案例

全文链接&#xff1a;http://tecdat.cn/?p3424 原文出处&#xff1a;拓端数据部落公众号 什么是检验对&#xff1f; 检验对的形式 &#xff08;x1&#xff0c;x2&#xff09; 出现在两种情况中&#xff1a; 对同一实体执行两次测量。例如&#xff0c;一项评估新型胰岛素疗效…

C-文件操作实现数据持久化,帮你快速了解文件操作函数

目录 一.了解文件 二.文件的打开和关闭 三.顺序读写文件函数 fputc字符输入函数 fgetc字符输入函数 fputs文本行输出函数 fgets文本行输入函数 fprintf格式化输出函数 fscanf格式化输入函数 fwrite二进制输出函数 fread二进制输入函数 四. 解析上述的流 五.文件的随机…

Redis 主从安装-Centos

Redis 主从安装-Centos 由于机器有限&#xff0c;所以接下来的教程都是在一台虚拟机中进行部署安装. Redis主从工作原理 如果你为master配置了一个slave&#xff0c;不管这个slave是否是第一次连接上Master&#xff0c;它都会发送一个PSYNC命令给master请求复制数据。master…