【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅱ

news/2024/10/31 1:29:18/

 

Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法......感兴趣就关注我吧!你定不会失望。

🌈个人主页:主页链接

🌈算法专栏:专栏链接

     我会一直往里填充内容哒!

🌈LeetCode专栏:专栏链接 

    目前在刷初级算法的LeetBook 。若每日一题当中有力所能及的题目,也会当天做完发出

🌈代码仓库:Gitee链接

🌈点击关注=收获更多优质内容🌈

目录

题目:102. 二叉树的层序遍历

题解:

代码实现:

题目:2583. 二叉树中的第 K 大层和

题解:

代码实现:

 题目:剑指 Offer II 044. 二叉树每层的最大值

题解:

代码实现:

完结撒花:

今天的题目相较于昨天,增加了一点难度,但不用慌,我们一起来看看吧.

还不熟悉的朋友们可以看看我的二叉树专题,相信你定能有所收获

 

题目:102. 二叉树的层序遍历

题解:

什么是层序遍历呢?相较于前中后序的遍历方式,层序遍历是一层层的去遍历,例如这一题

那如何做到一层层遍历呢?

可以先将一个节点放入队列,每当取出一个节点的时候就将其左右非空节点放入队列中.

如此循环往复,当队列为空的时候,此时就将二叉树层序遍历完了.

 所以我们需要一个队列来存储树的节点,那么如何知道这一层遍历完了呢?

我们可以在取出每次开始取出节点的时候,记录下此时队列内的数据个数,此时就是该层的节点个数.(可以看看上图)

(注意队列是头先出,从尾插入)每次插入的是非空节点

代码实现:

class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {queue<TreeNode*>tree;vector<vector<int>>ans;if(root==NULL)return {};tree.push(root);int height=0;while(!tree.empty()){height=tree.size();ans.push_back(vector<int>());for(int i=1;i<=height;i++){TreeNode*tmp=tree.front();tree.pop();ans.back().push_back(tmp->val);if(tmp->left)tree.push(tmp->left);if(tmp->right)tree.push(tmp->right);}            }return ans;}
};

题目:2583. 二叉树中的第 K 大层和

题解:

在有了上一题的基础下,这题就十分的简单啦,整体思想如下:先将每一层的值相加,然后放入容器当中,最后排个序,取出k-1层的即可.

具体的来看:层序遍历每一层的值,当遍历完这一层的时候,也就是size==0时,将这层的结果放入容器当中,最后通过lambda表达式实现从大到小排序,返回k-1层的结果(下标从0开始)

代码实现:

class Solution {
public:long long kthLargestLevelSum(TreeNode* root, int k) {queue<TreeNode*>tag;vector<long long>res;tag.push(root);while(!tag.empty()){int size=tag.size();int ans=0;for(int i=1;i<=size;i++){TreeNode*tmp=tag.front();tag.pop();ans+=tmp->val;if(tmp->left)tag.push(tmp->left);if(tmp->right)tag.push(tmp->right);}res.push_back(ans);}sort(res.begin(),res.end(),[](auto const &c1,auto const &c2){return c1>=c2;});if(res.size()<k)return -1;else return res[k-1];}
};

 题目:剑指 Offer II 044. 二叉树每层的最大值

题解:

这里有两种方法(深度优先搜索与广度优先搜索)其实也就是前序遍历与层序遍历,层序遍历这里简单提一下.与上面的大同小异就不过多赘述了:依旧是遍历出每一层最大的值,将其放入数组即可.

深度优先搜索:先看看基础情况 若当前遍历到的值等于size,则说明这一层还没有元素被放入到容器当中,此时直接放入遍历到的元素即可,若反之,则取容器中对应层的元素与现在要放入的元素比较取最大值即可.

代码实现:

class Solution0 {//dfs
public:void preorder(TreeNode*root,vector<int>&res,int pi){if(pi==res.size()){res.push_back(root->val);}else{res[pi]=max(res[pi],root->val);}if(root->left){preorder(root,res,pi+1);}if(root->right){preorder(root, res,pi+1);}}vector<int> largestValues(TreeNode* root) {int i=0;if(!root)return {};vector<int>res;preorder(root,res,0);return res;}
};class Solution {
public:vector<int> largestValues(TreeNode* root) {queue<TreeNode*>tree;vector<int>ans;if(root==NULL)return {};tree.push(root);int height=0;while(!tree.empty()){int Max=INT_MIN;height=tree.size(); for(int i=1;i<=height;i++){TreeNode*tmp=tree.front();tree.pop();Max=max(Max,tmp->val);if(tmp->left)tree.push(tmp->left);if(tmp->right)tree.push(tmp->right);}ans.push_back(Max);}return ans;}
};

完结撒花:

🌈本篇博客的内容【你真的会二叉树了嘛? --二叉树LeetCode专题Ⅱ】已经结束。

🌈若对你有些许帮助,可以点赞、关注、评论支持下博主,你的支持将是我前进路上最大的动力。

🌈若以上内容有任何问题,欢迎在评论区指出。若对以上内容有任何不解,都可私信评论询问。

🌈诸君,山顶见!


http://www.ppmy.cn/news/40698.html

相关文章

LeetCode·2289. 使数组按非递减顺序排列·单调栈

作者&#xff1a;小迅 链接&#xff1a;https://leetcode.cn/problems/steps-to-make-array-non-decreasing/solutions/2213056/dan-diao-zhan-zhu-shi-chao-ji-xiang-xi-b-rvv0/来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 著作权归作者所有。商业转载请联系作者获…

docker安装vim报错E: Unable to locate package vim

原因&#xff1a;debian源不适用 解决方法&#xff1a; 1、更换镜像源&#xff1a; echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free" >/etc/apt/sources.list echo "deb http://mirrors.tuna.tsinghua.edu.cn/d…

C++--搜索二叉树的实现以及【原理详细讲解】+递归实现接口的代码

搜索二叉树搜索二叉树的定义插入查找遍历删除&#xff08;重点&#xff09;总结前言&#xff1a;文章中的代码大多以截图的形式呈现&#xff0c;文章的结尾处有二叉搜索树的代码链接。 搜索二叉树的定义 搜素二叉树&#xff1a; 若它的左子树不空&#xff0c;则左子树上所有结…

【Dev-c++】美化配置

概述 一个好的配置能够帮助开发者完成更便捷、更快速的开发书山有路勤为径&#xff0c;学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、设置语法格式 点击工具 → 编辑器选项 选择 语法 点击预设这里选择 PlasticCodeWrap 只有第一…

【Java语法糖】泛型与源码角度分析静态问题

概念 首先聊聊泛型&#xff0c;泛型是JDK5的新特性。泛型是用来指定不同类型来控制形参具体限制的类型。泛型这种语法机制&#xff0c;只在程序编译阶段起作用&#xff0c;只是给编译器参考的&#xff08;运行阶段泛型没用&#xff09;。写了这么多代码应该能知道泛型的优点就是…

【01】PointNet论文解析

PointNet的应用 1.点云图像的分类&#xff08;整片点云是什么物体&#xff09; 2.点云图像的部件分割&#xff08;整片点云所代表的物体能拆分的结构&#xff09; 3.点云图像的语义分割&#xff08;将三维点云环境中不同的物体用不同的颜色区分开&#xff09; 补充 PointN…

( “树” 之 DFS) 226. 翻转二叉树 ——【Leetcode每日一题】

226. 翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[…

美颜技术的创新之路——美颜SDK的原理与应用探究

随着科技的不断发展&#xff0c;手机相机已经成为人们记录生活的重要工具。然而&#xff0c;拍照时的颜值问题却一直困扰着人们。为了解决这一难题&#xff0c;美颜技术应运而生。而美颜SDK作为美颜技术的一种应用&#xff0c;更是在不断地创新和发展中。本文将着重探究美颜SDK…