代码随想录算法训练营第36期DAY21

DAY21

513找树左下角的值

自己写的,过了(注意到层序遍历中,que队头存的是最左边的节点,再写一个getheight函数控制最大高度就好)。待会看解析,掌握迭代、递归。

优化迭代法:不用找最大深度,直接记录每层的res,用i=0记录。While结束前的那层,就是最后一层。

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8.  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9.  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10.  * };
  11.  */
  12. class Solution {
  13. public:
  14.     int geth(TreeNode* root)
  15.     {
  16.         if(root==nullptrreturn 0;
  17.         return 1+max(geth(root->left),geth(root->right));
  18.     }
  19.     int findBottomLeftValue(TreeNode* root) {
  20.         queue<TreeNode*> que;
  21.         int res;
  22.         int h=geth(root);
  23.         int hn=0;
  24.         if(root!=nullptr)que.push(root);
  25.         while(!que.empty())
  26.         {
  27.             hn++;
  28.             int size=que.size();
  29.             for(int i=0;i<size;i++)
  30.             {
  31.                 TreeNode* node=que.front();
  32.                 que.pop();
  33.                 res=node->val;
  34.                 if(node->left) que.push(node->left);
  35.                 if(node->right) que.push(node->right);
  36.                 if(node->left==nullptr&&node->right==nullptr&&hn==h) return res;
  37.             }
  38.         }
  39.         return -1;
  40.     }
  41. };

递归:

112路径总和

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8.  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9.  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10.  * };
  11.  */
  12. class Solution {
  13. public:
  14.     bool isp(TreeNode* root,int t)
  15.     {
  16.         if(!root->left&&!root->right&&t==0return true;
  17.         if(!root->left&&!root->right) return false;
  18.         if(root->left){
  19.             if(isp(root->left,t-root->left->val)) return true;
  20.         }
  21.         if(root->right){
  22.             if(isp(root->right,t-root->right->val)) return true;
  23.         }
  24.         return false;
  25.     }
  26.     bool hasPathSum(TreeNode* root, int targetSum) {
  27.         if(root==nullptr) return false;
  28.         return isp(root,targetSum-root->val);
  29.     }
  30. };

113路径总和ii

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8.  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9.  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10.  * };
  11.  */
  12. class Solution {
  13. private:
  14.     vector<vector<int>> result;
  15.     vector<int> path;
  16.     void isp(TreeNode* root,int t)
  17.     {
  18.         if(!root->left&&!root->right&&t==0) {result.push_back(path);return;}
  19.         if(!root->left&&!root->right) return ;
  20.         if(root->left){
  21.             path.push_back(root->left->val);
  22.             isp(root->left,t-root->left->val); 
  23.             path.pop_back();
  24.         }
  25.         if(root->right){
  26.             path.push_back(root->right->val);
  27.             isp(root->right,t-root->right->val);
  28.             path.pop_back();
  29.         }
  30.         return;
  31.     }
  32. public:
  33.     vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
  34.         result.clear();
  35.         path.clear();
  36.         if(root==nullptr) return result;
  37.         path.push_back(root->val);
  38.         isp(root,targetSum-root->val);
  39.         return result;
  40.     }
  41. };

已学习:由遍历序列构造二叉树_王道数据结构

学会了手写,但是编程实现呢?下面就是实例。

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

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8.  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9.  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10.  * };
  11.  */
  12. class Solution {
  13. private:
  14.     TreeNode* ft(vector<int>inorder,vector<int>postorder)
  15.     {
  16.         if(inorder.size()==0return NULL;
  17.         int rootval=postorder[postorder.size()-1];
  18.         TreeNode* root=new TreeNode(rootval);
  19.         if(postorder.size()==1return root;
  20.         postorder.resize(postorder.size()-1);
  21.         int index=0;
  22.         for(;index<inorder.size();index++)
  23.         {
  24.             if(inorder[index]==rootval) break;
  25.         }
  26.         vector<intLI(inorder.begin(),inorder.begin()+index);
  27.         vector<intRI(inorder.begin()+index+1,inorder.end());
  28.         vector<intLpo(postorder.begin(),postorder.begin()+LI.size());
  29.         vector<intRpo(postorder.begin()+LI.size(),postorder.end());
  30.         root->left=ft(LI,Lpo);
  31.         root->right=ft(RI,Rpo);
  32.         return root;
  33.     }
  34. public:
  35.     TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
  36.         if(inorder.size()==0||inorder.size()==0return nullptr;
  37.         return ft(inorder,postorder);
  38.     }
  39. };

105从前序与中序遍历构造二叉树

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8.  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9.  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10.  * };
  11.  */
  12. class Solution {
  13. private:
  14.     TreeNode* ft(vector<int>preorder,vector<int>inorder)
  15.     {
  16.         if(inorder.size()==0return NULL;
  17.         int rootval=preorder[0];
  18.         TreeNode* root=new TreeNode(rootval);
  19.         if(preorder.size()==1return root;
  20.         for(int i=0;i<preorder.size()-1;i++)
  21.             preorder[i]=preorder[i+1];
  22.         preorder.resize(preorder.size()-1);
  23.         int index=0;
  24.         for(;index<inorder.size();index++)
  25.         {
  26.             if(inorder[index]==rootval) break;
  27.         }
  28.         vector<intLI(inorder.begin(),inorder.begin()+index);
  29.         vector<intRI(inorder.begin()+index+1,inorder.end());
  30.         vector<intLpr(preorder.begin(),preorder.begin()+LI.size());
  31.         vector<intRpr(preorder.begin()+LI.size(),preorder.end());
  32.         root->left=ft(Lpr,LI);
  33.         root->right=ft(Rpr,RI);
  34.         return root;
  35.     }
  36. public:
  37.     TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
  38.         if(inorder.size()==0||preorder.size()==0return nullptr;
  39.         return ft(preorder,inorder);
  40.     }
  41. };

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

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

相关文章

解决本地启动项目,用IP地址访问失败问题

解决方法&#xff1a;看看index.html页面有没有 这个标签&#xff0c;将它注释掉

Mybatis的简介和下载安装

什么是 MyBatis &#xff1f; MyBatis 是一款优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息&#xff0c;将接口和 Java 的…

Vue3基础笔记(4)组件

目录 一.模版引用 二.组件组成 1.引入组件 2.注入组件 3.显示组件 三.组件嵌套关系 四.组件注册方式 五.组件传递数据 六.组件事件 一.模版引用 虽然Vue的声明性渲染模型为你抽象了大部分对DOM的直接操作&#xff0c;但在某些情况下&#xff0c;我们仍然需要直接访问底…

30分钟打造属于自己的Flutter内存泄漏检测工具---FlutterLeakCanary

30分钟打造属于自己的Flutter内存泄漏检测工具 思路检测Dart 也有弱引用-----WeakReference如何执行Full GC&#xff1f;如何知道一个引用他的文件路径以及类名&#xff1f; 代码实践第一步&#xff0c;实现Full GC第二步&#xff0c;如何根据对象引用&#xff0c;获取出他的类…

Python运维-日志记录、FTP、邮件提醒

本章目录如下&#xff1a; 五、日志记录 5.1、日志模块简介 5.2、logging模块的配置与使用 六、搭建FTP服务器与客户端 6.1、FTP服务器模式 6.2、搭建服务器 6.3、编写FTP客户端程序 七、邮件提醒 7.1、发送邮件 7.2、接收邮件 7.3、实例&#xff1a;将报警信息实时…

【系统架构师】-选择题(十四)

1、某企业开发信息管理系统平台进行 E-R 图设计&#xff0c;人力部门定义的是员工实体具有属性&#xff1a;员工号、姓名、性别、出生日期、联系方式和部门,培训部门定义的培训师实体具有属性:培训师号&#xff0c;姓名和职称&#xff0c;其中职称{初级培训师&#xff0c;中级培…

【每日刷题】Day33

【每日刷题】Day33 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 2. 445. 两数相加 II - 力扣&#xff08;…

pytest教程-38-钩子函数-pytest_runtest_protocol

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest_collection_finish钩子函数的使用方法&#xff0c;本小节我们讲解一下pytest_runtest_protocol钩子函数的使用方法。 pytest_runtest_protocol 钩子函数在 pytest 运行单个测试用例之前…

uniapp picker组件的样式更改

不知道有没有小伙伴遇到过这个问题 我是各种穿透和层级都尝试了更改不了其样式 梳理一下 H5端 在全局app.vue下添加如下代码 .uni-picker-container .uni-picker-header{ background-color: $uni-color-pink; //picker头部背景色}.uni-picker-container .…

【busybox记录】【shell指令】uniq

目录 内容来源&#xff1a; 【GUN】【uniq】指令介绍 【busybox】【uniq】指令介绍 【linux】【uniq】指令介绍 使用示例&#xff1a; 去除重复行 - 默认输出 去除重复行 - 跳过第n段&#xff08;空格隔开&#xff09;&#xff0c;比较n1以后的内容&#xff0c;去重 去…

数组折半法查找数据(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> //定义数据&#xff1b; #define N 15int main() {//初始化变量值&#xff1b;int a[N], i, top, bott, loca, flag 1, sign, numb…

使用macof发起MAC地址泛洪攻击

使用macof发起MAC地址泛洪攻击 MAC地址泛洪攻击原理&#xff1a; MAC地址泛洪攻击是一种针对交换机的攻击方式&#xff0c;目的是监听同一局域网中用户的通信数据。交换机的工作核心&#xff1a;端口- MAC地址映射表。这张表记录了交换机每个端口和与之相连的主机MAC地址之间…

Map集合的实现类~HashMap

存储结构&#xff1a;哈希表 键重复依据是hashCode和equals方法&#xff08;键不能重复&#xff09; 添加&#xff1a; 先创建Student类&#xff0c;那么往HashSet添加的就是Student对象作为键值&#xff0c;后面的作为值 删除&#xff1a; 判断&#xff1a; 遍历&#xff1a…

Parts2Whole革新:多参照图定制人像,创新自定义肖像生成框架!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享&#xff0c;与你一起了解前沿深度学习信息&#xff01; Parts2Whole革新&#xff1a;多参照图定制人像&#xff0c;创新自定义肖像生成框架&#xff01; 引言&#xff1a;探索多条件人像生成的新篇章 在数字内容创作…

【MATLAB源码-第204期】基于matlab的语音降噪算法对比仿真,谱减法、维纳滤波法、自适应滤波法;参数可调。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 语音降噪技术的目的是改善语音信号的质量&#xff0c;通过减少或消除背景噪声&#xff0c;使得语音更清晰&#xff0c;便于听者理解或进一步的语音处理任务&#xff0c;如语音识别和语音通讯。在许多实际应用中&#xff0c;如…

深度学习之基于YOLOv5智慧交通拥挤预警检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着城市化进程的加速和人口规模的不断增长&#xff0c;交通拥挤问题日益严重。传统的交通拥挤预警方…

C++笔记-makefile添加第三方.h和.cpp及添加.h和lib库模板

目文件结构如下所示时&#xff1a; project/├── main.cpp├── test.cpp├── DIRA/│ ├── A.cpp│ └── A.h├── DIRBLIB/│ └── libB.so└── include/└── B.h Makefile如下所示&#xff1a; # 编译器设置 CXX g CXXFLAGS -stdc11 -Wall# 目录…

互联网十万个为什么之什么是云计算

云计算是一种通过互联网提供计算资源和服务的技术。它允许用户随时随地访问和使用云平台上的数据、软件和硬件资源。在数字化时代&#xff0c;互联网已经成为基础设施。云计算使得数据中心能够像一台计算机一样去工作。通过互联网将算力以按需使用、按量付费的形式提供给用户&a…

2024年Q1脱毛膏线上市场(京东天猫淘宝)销量销额排行榜

鲸参谋监测的2024年Q1季度线上电商平台&#xff08;天猫淘宝京东&#xff09;脱毛膏行业销售数据已出炉&#xff01; 根据鲸参谋数据显示&#xff0c;今年Q1季度在线上电商平台&#xff08;天猫淘宝京东&#xff09;&#xff0c;脱毛膏的销量累计接近220万件&#xff0c;环比增…

基于51单片机的ADC0804的电压表设计(仿真+源码+设计资料)

目录 1、前言 2、资料内容 3、仿真图 4、程序 资料下载地址&#xff1a;基于51单片机的ADC0804的电压表设计&#xff08;仿真源码设计资料&#xff09; 1、前言 最近看网上有很少的ADC0804的设计了&#xff0c;都由0809代替&#xff0c;但是有个别因为成本原因和学校课…
最新文章