LeetCode 366. 寻找二叉树的叶子节点(上下翻转二叉树+BFS)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一棵二叉树,请按以下要求的顺序收集它的全部节点:

  • 依次从左到右,每次收集并删除所有的叶子节点
  • 重复如上过程直到整棵树为空
示例:
输入: [1,2,3,4,5]1/ \2   3/ \     4   5    输出: [[4,5,3],[2],[1]]解释:1. 删除叶子节点 [4,5,3] ,得到如下树结构:1/ 2          2. 现在删去叶子节点 [2] ,得到如下树结构:1          3. 现在删去叶子节点 [1] ,得到空树:[]         

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-leaves-of-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:LeetCode 156. 上下翻转二叉树(DFS)*

  • 先自底向上,翻转二叉树,把子节点的 left,指向父节点
  • 同时记录父节点有多少个子节点(0,1,2,)
  • 把叶子节点加入队列
  • 开始BFS,出队一个,就把该节点的 left (原来的父节点的子节点计数 -1)
  • 当节点的子节点计数为0时,它就变成了叶子节点,可以入队了
class Solution {vector<vector<int>> ans;queue<TreeNode*> q;unordered_map<TreeNode*, int> map;//父节点底下挂着几个子节点
public:vector<vector<int>> findLeaves(TreeNode* root) {reverse(root);//上下翻转二叉树while(!q.empty()){int size = q.size(), i = 0;vector<int> lv(size);while(size--){TreeNode *cur = q.front();q.pop();map[cur->left]--;//原父节点的子节点计数-1lv[i++] = cur->val;//当前值写入答案if(cur->left && map[cur->left]==0)//父节点计数为0,可以入队q.push(cur->left);}ans.push_back(lv);}return ans;}TreeNode* reverse(TreeNode* root){if(!root) return NULL;auto l = root->left;auto r = root->right;if(!l && !r)q.push(root);//叶子节点加入队列map[root] += (l?1:0) + (r?1:0);//记得加括号,子节点个数root->left = NULL;//断开子节点root->right = NULL;auto lc = reverse(l);auto rc = reverse(r);if(lc)lc->left = root;//子节点的left指向父节点if(rc)rc->left = root;return root;}
};

0 ms 9 MB

  • 上面做法遍历了2次树,更简单的做法,按照树的高度(2侧子树的最大高度 + 1自己)来分组
class Solution {vector<vector<int>> ans;
public:vector<vector<int>> findLeaves(TreeNode* root) {dfs(root);return ans;}int dfs(TreeNode* root){if(!root) return -1;int hl = dfs(root->left);int hr = dfs(root->right);int hcur = max(hl, hr) + 1;if(ans.size() <= hcur)ans.push_back({});ans[hcur].push_back(root->val);return hcur;}
};

4 ms 9.1 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

白话地图投影之初识地球

本文是Koala带你进入GIS世界的开篇&#xff0c;Koala打算用简单通俗的语言为大家介绍地图投影&#xff0c;帮助GISer理解地图投影的概念。作为进入GIS世界多年的老鸟&#xff0c;Koala也是在不断的实战中才真正理解和掌握地图投影的奥秘。 我们生活的地球长啥模样&#xff1f; …

欧洲杯2012

----------------------------------------------------------------------------- 欧洲杯2012 ----------------------------------------------------------------------------- 下载地址&#xff1a;http://itunes.apple.com/cn/app/ou-zhou-bei2012/id531622806?mt8 系统要…

LeetCode 245. 最短单词距离 III

文章目录1. 题目2. 解题1. 题目 给定一个单词列表和两个单词 word1 和 word2&#xff0c;返回列表中这两个单词之间的最短距离。 word1 和 word2 是有可能相同的&#xff0c;并且它们将分别表示为列表中两个独立的单词。 示例: 假设 words ["practice", "ma…

LeetCode 484. 寻找排列(找规律+贪心)

文章目录1. 题目2. 解题1. 题目 现在给定一个只由字符 ‘D’ 和 ‘I’ 组成的 秘密签名。 ‘D’ 表示两个数字间的递减关系&#xff0c;‘I’ 表示两个数字间的递增关系。 并且 秘密签名 是由一个特定的整数数组生成的&#xff0c;该数组唯一地包含 1 到 n 中所有不同的数字&a…

LeetCode 651. 4键键盘(DP,Ctrl+CV)

文章目录1. 题目2. 解题1. 题目 假设你有一个特殊的键盘包含下面的按键&#xff1a; Key 1: (A)&#xff1a;在屏幕上打印一个 A。Key 2: (Ctrl-A)&#xff1a;选中整个屏幕。Key 3: (Ctrl-C)&#xff1a;复制选中区域到缓冲区。Key 4: (Ctrl-V)&#xff1a;将缓冲区内容输出…

oracle scn隐藏参数,Oracle隐含参数scn不一致启动

Oracle隐含参数&#xff1a;allow_resetlogs_corruption的使用提示&#xff1a;Oracle的隐含参数只应该在测试环境或者在Oracle Support的支持下使用orOracle隐含参数&#xff1a;allow_resetlogs_corruption的使用提示&#xff1a;Oracle的隐含参数只应该在测试环境或者在Orac…

LeetCode 298. 二叉树最长连续序列(自顶向下)

文章目录1. 题目2. 解题1. 题目 给你一棵指定的二叉树&#xff0c;请你计算它最长连续序列路径的长度。 该路径&#xff0c;可以是从某个初始结点到树中任意结点&#xff0c;通过「父 - 子」关系连接而产生的任意路径。 这个最长连续的路径&#xff0c;必须从父结点到子结点…

LeetCode 159. 至多包含两个不同字符的最长子串(滑动窗口)

文章目录1. 题目2. 解题1. 题目 给定一个字符串 s &#xff0c;找出 至多 包含两个不同字符的最长子串 t &#xff0c;并返回该子串的长度。 示例 1: 输入: "eceba" 输出: 3 解释: t 是 "ece"&#xff0c;长度为3。示例 2: 输入: "ccaabbb" 输…

linux nginx 图片服务器,搭建Nginx图片服务器(Linux)

wget http://nginx.org/download/nginx-1.19.1.tar.gzyum install gcc-cyum install -y pcre pcre-develyum install -y zlib zlib-develyum install -y openssl openssl-devel进入nginx目录./configure --prefix/usr/local/nginx --pid-path/var/run/nginx/nginx.pid --loc…

LeetCode 163. 缺失的区间

文章目录1. 题目2. 解题1. 题目 给定一个排序的整数数组 nums &#xff0c;其中元素的范围在 闭区间 [lower, upper] 当中&#xff0c;返回不包含在数组中的缺失区间。 示例&#xff1a;输入: nums [0, 1, 3, 50, 75], lower 0 和 upper 99, 输出: ["2", "…

小白学数据分析-----聚类分析理论之TwoSteps理论篇+实践篇

昨天分享了以前学习的聚类分析算法K-Means的部分知识&#xff0c;其实这个主要是了解一下这个算法的原理和适用条件就行了&#xff0c;作为应用而不是作为深入研究&#xff0c;能够很好的将业务和算法模型紧密结合的又有几人呢&#xff1f;所以一些基本知识还是很必要的&#x…

LeetCode 244. 最短单词距离 II(哈希map+set二分查找)

文章目录1. 题目2. 解题2.1 暴力超时2.2 哈希表set二分查找1. 题目 请设计一个类&#xff0c;使该类的构造函数能够接收一个单词列表。 然后再实现一个方法&#xff0c;该方法能够分别接收两个单词 word1 和 word2&#xff0c;并返回列表中这两个单词之间的最短距离。 您的方法…

从根本上解决 Infopath 2010 重复表的序号问题

经过多长期的查找资料&#xff0c;今天终于找到如何解决Infopath 重复表序号的问题&#xff0c;其实也很简单只用Xpath 语法就可以了 count(../preceding-sibling::*[local-name() "ExpensiveDetail"])1 ExpensiveDetail 是重复表的名字 转载于:https://www.cnblog…

linux怎么将进程调优到8,Linux的性能调优命令

性能调优一直是运维工程师最重要的工作之一&#xff0c;如果您所在的生产环境中遇到了系统响应速度慢&#xff0c;硬盘IO吞吐量异常&#xff0c;数据处理速度低于预期值的情况&#xff0c;又或者如CPU、内存、硬盘、网络等系统资源长期处于耗尽的状态&#xff0c;那么这篇文章将…

LeetCode 161. 相隔为 1 的编辑距离(DP/遍历)

文章目录1. 题目2. 解题2.1 DP超时2.2 一次遍历1. 题目 给定两个字符串 s 和 t&#xff0c;判断他们的编辑距离是否为 1。 注意&#xff1a; 满足编辑距离等于 1 有三种可能的情形&#xff1a; 往 s 中插入一个字符得到 t从 s 中删除一个字符得到 t在 s 中替换一个字符得到 …

Google搜索图片时只显示第一页

用Google搜索图片时出现&#xff0c;只显示第一页&#xff0c;其他页不能显示。 Method 1:未成功。 Method 2:成功。 结果图&#xff1a; 转载于:https://www.cnblogs.com/yfl-IT/archive/2012/06/19/2555429.html

pxe自动部署Linux,Kickstart+PXE自动部署CentOS6.6

生产环境中对于部署大量的相同系统的服务器&#xff0c;如果逐台安装操作系统的话是非常浪费时间的工作&#xff0c;还好CentOS提供了无人值守安装系统的功能&#xff0c;下面就详细介绍一下配置步骤。一、配置本机的yum源因为需要安装一些软件来达到我们的目的&#xff0c;所以…

LeetCode 247. 中心对称数 II(DP)

文章目录1. 题目2. 解题1. 题目 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字&#xff08;或者上下颠倒地看&#xff09;。 找到所有长度为 n 的中心对称数。 示例 : 输入: n 2 输出: ["11","69","88","96"]来…

重新排列参数

重新排列参数 重新排列参数操作可以使你重新排列方法、索引器中的参数。你将方法的参数重新排列后&#xff0c;所有使用该方法的地方都会相应调整。以下面代码为例&#xff1a; class Person{public void Print(string name, int age, bool sex){}}class Program{static void M…

LeetCode 251. 展开二维向量

文章目录1. 题目2. 解题1. 题目 请设计并实现一个能够展开二维向量的迭代器。该迭代器需要支持 next 和 hasNext 两种操作。、 示例&#xff1a; Vector2D iterator new Vector2D([[1,2],[3],[4]]);iterator.next(); // 返回 1 iterator.next(); // 返回 2 iterator.next();…