【数据结构与算法】二叉树基础OJ--下(巩固提高)

news2024/11/16 23:30:43

前言:

        上一篇文章我们讲到二叉树基础oj题目的练习,此篇文章是完成基础oj练习的完结篇。

传送-->【数据结构与算法】二叉树基础OJ -- 上 (巩固提高)-CSDN博客

💥🎈个人主页:​​​​​​Dream_Chaser~ 🎈💥

✨✨刷题专栏:http://t.csdn.cn/UlvTc

⛳⛳本篇内容:力扣与牛客网上二叉树OJ基础练习

目录

KY11 二叉树遍历

题目描述:

解题思路:

leetcode 94.二叉树中序遍历(数组存储)

题目描述:

​编辑

解题思路:

leetcode 145二叉树的后序遍历(数组存储)

题目描述:

解题思路: 


KY11 二叉树遍历

题目来源:二叉树遍历_牛客题霸_牛客网 (nowcoder.com)

题目描述:

        编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。 

输入描述:

输入包括1行字符串,长度不超过100。 

输出描述:

可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。 

示例1

输入:abc##de#g##f###
输出:c b e g d f a 

解题思路:

先来复习一遍前序遍历,在此基础上,遍历一个比较难的字符串。 

画出其前序遍历图:

画出其前序遍历递归图(省略一部分同理的),剩下的可以根据上面的前序遍历图可求出

有了上面的基础,我们写出代码实现部分:

typedef int BTDataType;
typedef struct BTreeNode
{
    int val;
    struct BTreeNode* left;
    struct BTreeNode* right;
}BTNode;

BTNode* BuyNode(BTDataType x)
{
    BTNode* root=(BTNode*)malloc(sizeof(BTNode));
    if(root == NULL)
    {
        perror("malloc fail");
        return NULL;
    }
    root->val=x;
    root->left =NULL;
    root->right = NULL;

    return root;
}

BTNode* CreateTree(char* a,int* pi)
{
    if(a[(*pi)] =='#')
    {
        (*pi)++;
        return NULL;
    }
    BTNode* root = BuyNode(a[(*pi)]);
    (*pi)++;

    root->left  = CreateTree(a, pi);
    root->right = CreateTree(a,pi);
    return root;
}
void InOrder(BTNode* root)
{
    if(root == NULL)
    {
        return ;
    }
    InOrder(root->left);
    printf("%c ",root->val);
    InOrder(root->right);
}
int main()
{
    char a[100];
    scanf("%s",a);
    int i=0;
    BTNode* root=CreateTree(a,&i);
    InOrder(root);
    printf("\n");
}

执行: 

leetcode 94.二叉树中序遍历(数组存储)

题目来源:94. 二叉树的中序遍历 - 力扣(LeetCode)

题目描述:

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

示例:

解题思路:

跟上一篇的前序遍历相差不大,就是将参数换个位置,其它不便说明。

代码实现:

int TreeSize(struct TreeNode* root)
{
    if(root == NULL)
    {
        return 0;
    }
    return TreeSize(root->left) + TreeSize(root->right) +1;
}
void _inorder(struct TreeNode* root,int* a,int* pi)
{
    if(root==NULL)
    {
        return ;
    }
    _inorder(root->left,a,pi);
    a[(*pi)++]=root->val;
     _inorder(root->right,a,pi);
}
int* inorderTraversal(struct TreeNode* root, int* returnSize){
    *returnSize = TreeSize(root);
    int* a=(int*)malloc(*returnSize *sizeof(int));

    int i=0;
    _inorder(root,a,&i);
    return a;
}

代码执行: 

leetcode 145二叉树的后序遍历(数组存储)

题目来源:145. 二叉树的后序遍历 - 力扣(LeetCode)

题目描述:

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 

示例:

解题思路: 

跟上一篇的前序遍历相差不大,就是将参数换个位置,其它不便说明。

代码实现:

int TreeSize(struct TreeNode* root)
{
    return root==NULL ? 0 : TreeSize(root->left) + TreeSize(root->right)+ 1;
}
void _postorder(struct TreeNode*root,int* a,int* pi)
{
    if(root==NULL)
    {
        return ;
    }
    _postorder(root->left,a,pi);
    _postorder(root->right,a,pi);
    a[(*pi)++]=root->val;
}
int* postorderTraversal(struct TreeNode* root, int* returnSize){
    *returnSize=TreeSize(root);
    int* a=(int*)malloc(*returnSize*sizeof(struct TreeNode));

    int i=0;
    _postorder(root,a,&i);
    return a;
}

         此篇文章到此结束,感谢你的来访!

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

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

相关文章

分类预测 | Matlab实现SSA-ELM麻雀优化算法优化极限学习机分类预测

分类预测 | Matlab实现SSA-ELM麻雀优化算法优化极限学习机分类预测 目录 分类预测 | Matlab实现SSA-ELM麻雀优化算法优化极限学习机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SSA-ELM麻雀优化算法优化极限学习机分类预测(Matlab完整…

微信小程序云开发如何实现多条件多字段模糊查询

之前的博文中,已经跟大家介绍过,微信小程序云开发如何实现单条件单字段的模糊查询,这个是很常见的业务需求。在一些更复杂的场景下,我们需要实现多条件多字段的模糊查询,比如同时兼容对商品名称、类别、产地等多条件的…

Canvas录制视频

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

AI:41-基于基于深度学习的YOLO模型的玉米病害检测

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

idea使用MyBatisX插件

1.MyBatisX功能 (1).实现mapper和xml的跳转 (2).自动生成java文件,比如mapper、service、dao、pojo 2.安装MyBatisX插件 install后然后重启idea即可 3.使用MyBatieX实现mapper和xml跳转 (1).点击mapper中的红色图标即可跳转到对应的xml方…

算法通过村第十八关-回溯|青铜笔记|什么叫回溯(初篇)

文章目录 前言从N叉树说起为什么有的问题暴力搜索也不行总结 前言 提示:我对你透露一个大密码,这是人类最古老的玩笑。往哪走,都是往前走。 --米兰昆德拉 回溯是非常重要的算法思想之一,主要解决一些暴力枚举也搞不定的问题&#…

第五章 I/O管理 五、输入/输出应用程序接口设备驱动程序接口

目录 一、应用程序接口 二、阻塞和非阻塞I/O 阻塞I/O: 非阻塞I/O: 三、设备驱动程序 一、应用程序接口 以前的统一接口不适用了,现在改为了几种不同的接口 二、阻塞和非阻塞I/O 阻塞I/O: 应用程序发出I/O系统调用,进程需转为阻塞态等待。 eg:字符…

40 深度学习(四):卷积神经网络|深度可分离卷积|colab和kaggle的基础使用

文章目录 卷积神经网络为什么要卷积卷积的具体流程池化tensorflow代码 深度可分离卷积原理介绍计算量对比代码参数计算例子 colab 和 kagglecolabkaggle如何在colab上使用kaggle的数据 卷积神经网络 卷积神经网络的基本结构 1: (卷积层(可选)池化层) * N全连接层 *…

保险公司【Hamilton Insurance】申请1亿美元纽交所IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于美国的保险公司Hamilton Insurance Group, Ltd(简称:Hamilton Insurance)近期已向美国证券交易委员会(SEC)提交招股书&#xff…

力扣每日一题86:分隔链表

题目描述: 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1: 输入:head [1,4,…

陷阱,实时IO判断避坑!

这是题面&#xff1a; 然后我写了如下代码: #include<iostream> #include<map> #include<vector> #include<algorithm> using namespace std; #define int long long int const int maxLine50010; map<char,char> mymap; int arr[maxLine]{1,2…

数据结构Demo——简单计算器

简单计算器 一、项目介绍二、技术使用三、具体代码实现1.前端部分2.后端部分 一、项目介绍 本项目实现了一个通过网页访问的简单计算器&#xff0c;它可以对带括号的加减乘除表达式进行计算并将计算结果返回给用户&#xff0c;并且可以对用户输入的表达式进行合法性判断&#…

SV-10A-4G IP网络报警非可视终端 (4G版)

SV-10A-4G IP网络报警非可视终端 &#xff08;4G版&#xff09; https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.621e3d0dpv5knb&ftt&id745728046948 产品简介&#xff1a; 通过局域网/广域网网组网的网络报警系统&#xff0c;改变传统局域网组网…

【MySql】10- 实践篇(八)

文章目录 1. 用动态的观点看加锁1.1 不等号条件里的等值查询1.2 等值查询的过程1.3 怎么看死锁&#xff1f;1.4 怎么看锁等待&#xff1f;1.5 update 的例子 2. 误删数据后怎么办?2.1 删除行2.2 误删库/表2.3 延迟复制备库2.4 预防误删库 / 表的方法2.4.1 账号分离2.4.2 制定操…

人工智能(8):Numpy的使用

1 Numpy介绍 Numpy&#xff08;Numerical Python&#xff09;是一个开源的Python科学计算库&#xff0c;用于快速处理任意维度的数组。 Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务&#xff0c;使用Numpy比直接使用Python要简洁的多。 Numpy使用ndarray对象来处理…

NSGA-II 遗传多目标算法(python示例)

一、前言 最近在准备毕业论文&#xff0c;研究了一下主流的多目标算法&#xff0c;对于NSGA-II&#xff0c;网上大部分代码是全部是面向过程来实现的&#xff0c;本人更喜欢采用面向对象的方式&#xff0c;故采用python面向对象实现了一个示例&#xff0c;实现了对于二元多目标…

1400*C. Element Extermination(贪心规律)

Problem - 1375C - Codeforces 解析&#xff1a; 可以发现&#xff0c;最左端的数字&#xff0c;无论删除自己还是下一个&#xff0c;这个位置的值都不会变小。 同理&#xff0c;最右端位置的值都不会变大。 所以当最后剩余两个数字的时候&#xff0c;只有左端小于右端数字&…

STM32—PWM开发SG90舵机

目录 PWM介绍 PWM输出模式&#xff1a; ​编辑PWM占空比&#xff1a; PWM周期与频率公式&#xff1a;​编辑 SG90舵机介绍 1. 什么是舵机 2. 怎么控制舵机 SG90舵机介绍实战 1. 在 SYS 选项里&#xff0c;将 Debug 设为 Serial Wire​编辑 2. 将 RCC 里的 HSE 设置为 …

Vue的快速入门

Vue的快速入门 下载并安装vue.js Vue是一个基于JavaScript实现的框架, 要使用它就需要从[Vue官网]((https://cn.vuejs.org/)下载 vue.js 文件 第一步&#xff1a;打开Vue2官网&#xff0c;点击下图所示的“起步” 第二步&#xff1a;继续点击下图所示的“安装” 第三步&…

二叉树的遍历+二叉树的基本操作

文章目录 二叉树的操作一、 二叉树的存储1.二叉树的存储结构 二、 二叉树的基本操作1.前置创建一棵二叉树&#xff1a;1. 定义结点 2.简单的创建二叉树 2.二叉数的遍历1.前序遍历2.中序遍历3.后序遍历4.层序遍历 3.二叉树的操作1.获取树中节点的个数2.获取叶子节点的个数3.获取…