代码随想录第十六天(一刷C语言)|找树左下角的值路径总和从中序与后序遍历序列构造二叉树

创作目的:为了方便自己后续复习重点,以及养成写博客的习惯。

一、找树左下角的值

思路:采用递归

ledcode题目:https://leetcode.cn/problems/find-bottom-left-tree-value/description/

AC代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
 void dfs(const struct TreeNode *root ,int height, int *curVal ,int *curHeight) {
     if(root == NULL) {
         return ;
     }
     height++;
     dfs(root->left,height,curVal,curHeight);
     dfs(root->right,height,curVal,curHeight);
     if(height > *curHeight) {
         *curHeight = height;
         *curVal    = root->val;
     }
 }
int findBottomLeftValue(struct TreeNode* root) {
    int curVal,curHeight = 0;
    dfs(root,0,&curVal,&curHeight);
    return curVal;
}

二、路径总和

思路:采用递归,判断targetSum == root->val,sum的值每次更新减去前一个val即可。

lecode题目:https://leetcode.cn/problems/path-sum/

AC代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
bool hasPathSum(struct TreeNode* root, int targetSum) {
    if(root == NULL) {
        return false;
    }
    if(root->left == NULL && root->right == NULL) {
        return targetSum == root->val;
    }
    return hasPathSum(root->left,targetSum - root->val) || hasPathSum(root->right,targetSum - root->val);
}

三、从中序与后序遍历序列构造二叉树

思路:采用迭代的方法,代码参考的是ledcode题解

ledcode题目:https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/description/

AC代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
 struct TreeNode* createTreeNode(int val) {
     struct TreeNode* ret = malloc(sizeof(struct TreeNode));
     ret->val = val;
     ret->left = ret->right = NULL;
     return ret;
 }
struct TreeNode* buildTree(int* inorder, int inorderSize, int* postorder, int postorderSize) {
    if(postorderSize == 0) {
        return NULL;
    }
    struct TreeNode* root = createTreeNode(postorder[postorderSize - 1]);
    struct TreeNode** s = malloc(sizeof(struct TreeNode*)* 10001);
    int top = 0;
    s[top++] = root;
    int inorderIndex = inorderSize - 1;
    for(int i = postorderSize - 2;i >= 0;i--) {
        int postorderVal = postorder[i];
        struct TreeNode* node = s[top - 1];
        if(node->val != inorder[inorderIndex]) {
            node->right = createTreeNode(postorderVal);
            s[top++] = node->right;
        }else {
            while(top > 0 && s[top - 1]->val == inorder[inorderIndex]) {
                node = s[--top];
                inorderIndex--;
            }
            node->left = createTreeNode(postorderVal);
            s[top++] = node->left;
        }
    }
    return root;
}

全篇后记:

虽然难度在不断增加,但坚持下去总会有收获。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

免费WordPress站群插件-批量管理站群的免费软件

WordPress站群插件:让文章管理如丝般顺滑 在众多网站建设工具中,WordPress一直以其简便易用、丰富的插件生态而备受青睐。对于站群管理者而言,如何高效地更新、发布和推送文章是一项不可忽视的任务。本文将专注分享一款WordPress站群插件&am…

乳品企业生产ERP有哪些功能

乳品的生产管理涉及原材料采购、供应商选择、运输、出入库、车间生产、设备加工、质量检验等众多环节,每个环节有不同的业务流程和管理模式,产生的数据类型各不相同。 想要打破信息孤岛,提升跨部门和跨组织协作效率,就要求企业具…

建设“参与城市”大学--SMU在2023年绿色金融全球论坛上分享观点

2023年11月21日,由新加坡管理大学(SMU,简称新大)和中国人民大学(RUC,简称人大)联合主办的“绿色金融与治理:从承诺到行动”全球论坛在北京召开。论坛汇集了来自新加坡、中国及世界各…

SPSS生存分析:Kaplan-Meier分析

前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…

机器学习入门(第四天)——朴素贝叶斯

知识树 Knowledge tree P(y|x),P给定x的条件下,y的概率。如:P(y我招女孩子喜欢的概率|我是学生) 一个小故事 A story 女朋友和妈妈掉河里,路人拿出3颗豆,两颗红豆1颗绿豆。如果我抽中红豆救女朋友,抽中绿…

Temu已成拼多多第二曲线

11月28日,拼多多公布最新一季业绩报告。三季度,该集团实现营收688.4亿元,同比增长93.9%;实现美国通用会计准则口径净利润155.4亿元,净利润率为22.6%。相比市场此前预测的营收537.7亿元、经调整净利润129.74亿元&#x…

java第二十六课

数据库多表 多表做到每个表的字段名称不一样 Mysql 关系数据库 结合到商城:用户表 订单表 商品表 商品详情表 用户表:字段: 用户 id:唯一标志用户 用户名称:name 用户性别:sex 用户年龄:age 用户地址:position 用户密码…

C++和Python混合编程在数据采集程序中的应用

目录 一、引言 二、C和Python的特性及其在数据采集程序中的应用 1、C的特性及其在数据采集程序中的应用 2、Python的特性及其在数据采集程序中的应用 三、C和Python混合编程在数据采集程序中的实现方法 四、混合编程的优缺点以及未来发展趋势 五、代码示例 六、结论 一…

CAN网络出现错误帧从哪些方面去分析解决

标题:CAN网络出现错误帧从哪些方面去分析 实例1: 断电重启后,会有错误帧产生。 检查方案: 查看收发模块的初始化、使能是否在发送CAN报文之前完成? 实例2: 周期性报文,有时会冒出一帧错误帧&…

MySQL官网推荐书籍

MySQL官网推荐书籍 图片有防盗链csdn转存失败。有图版传送门MySQL官网推荐书籍 高效的MySQL性能:Daniel Nichter的最佳实践和技术 Daniel Nichter 向您展示了如何应用直接影响 MySQL 性能的最佳实践和技术。您将学习如何通过分析查询执行、为常见 SQL 子句和表联接…

【Linux】yum -- 软件包管理器

目录 一、Linux中是如何安装软件的 1.1 安装的方法 1.2 安装的本质(基本理解) 二、软件包 2.1 软件包的概念 2.2 为什么要有软件包 三、yum--软件包管理器 3.1 yum的概念 3.2 yum的使用 3.2.1 搜索一个软件 3.2.2 安装一个软件 3.2.3 卸载一个软件 3.3 yum源更新 …

2种方法,jmeter用一个正则提取器提取多个值!

jmeter中,用json提取器,一次提取多个值,这个很多人都会。但是,用正则提取器一次提取多个,是否可以呢? 肯定,很多人都自信满满的说,可以!形如:token":“…

vuepress-----3、导航栏

3、导航栏 # 页面目录结构约定 . ├── docs │ ├── .vuepress (可选的) │ │ ├── components (可选的) │ │ ├── theme (可选的) │ │ │ └── Layout.vue │ │ ├── public (可选的) │ │ ├── styles (可选的) │ │ │…

python 交互模式和命令行模式的问题

python 模式的冲突 unexpected character after line continuation character 理论上 ide里,输入 python 文件路径\文件.py 就可以执行 但是有时候却报错 unexpected character after line continuation character 出现上述错误的原因是没有退出解释器&#x…

关注这两点 或能避开一些现货黄金交易的陷阱

在现货黄金投资中,交易机会是处处都有,但是亏损的情况也可能出现。投资者要在陷阱处处的市场中获得稳定盈利,就需要懂得如何规避现货黄金投资的陷阱。下面我们就来介绍两个很常用的避开陷阱的方法。 看交易的活跃度。交易越活跃,市…

人体是否有清除hpv病毒能力?北京劲松HPV诊疗中心提出观点

​HPV,全称人乳头瘤病毒,是一种常见的性传播疾病,其症状包括尖锐湿疣、皮肤疣等。那么,人体是否有清除HPV病毒的能力呢?答案是肯定的,人体确实具有清除HPV病毒的能力。 首先,我们要了解HPV病毒是如何感染…

1+X网络系统建设与运维练习题

1.OSPF的最优路由,会放到IP路由表中指导数据转发 (x) 2.当AP工作在2.4GHz频段的时候,AP工作的频率范围是2.4GHz~2.4835GHZ。在此频率范围内又划分出14个信道。每信道的中心频率相隔5MHz,每个信道可供占用的带宽为22MHz…

​在做接口测试的时候,如果接口还没有开发好,你这边应该怎么去介入测试?

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

从功能测试到自动化测试,我总结了一些工作经验分享给大家

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

由于找不到steam_api64.dll如何修复?steam_api64.dll丢失多种解决方法

steam_api64.dll文件介绍 steam_api64.dll是Steam平台的一个关键组件,主要用于支持Steam客户端和相关游戏的应用程序。这个文件缺失或损坏会导致Steam及相关游戏无法正常运行。它位于Steam安装目录的bin子文件夹中。 steam_api64.dll丢失的原因 系统误删&#xf…