文章目录

  • 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阿明),一起加油、一起学习进步!

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

  1. c#二叉树 取叶子节点个数_二叉树的最小深度+完全二叉树的节点个数

    二叉树的最小深度 题目:给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 示例 1: 输入:root = [3,9,20 ...

  2. c++用递归计算二叉树的叶子节点的个数

    c++用递归计算二叉树的叶子节点的个数 二叉树的叶子节点是左右节点均为NULL的节点,这也判断递归的条件,直接上代码 int num_tree(Btree *tree,int&count){i ...

  3. 二叉树打印叶子节点,非递归_使用递归打印链接列表中的备用节点

    二叉树打印叶子节点,非递归 Solution: 解: Input: A singly linked list whose address of the first node is stored in ...

  4. 分别采用递归和非递归方式编写两个函数,求一棵二叉树中叶子节点个数

    分别采用递归和非递归方式编写两个函数,求一棵二叉树中叶子节点个数 #include #include #define MAXSIZE 50 typedef char datatype; typedef ...

  5. 二叉树计算叶子节点c语言报告,二叉树计算叶子节点的算法(数据结构)C语言版...

    <二叉树计算叶子节点的算法(数据结构)C语言版>由会员分享,可在线阅读,更多相关<二叉树计算叶子节点的算法(数据结构)C语言版(1页珍藏版)>请在人人文库网上搜索. 1.* H ...

  6. 《LeetCode力扣练习》第226题 翻转二叉树 Java

    <LeetCode力扣练习>第226题 翻转二叉树 Java 一.资源 题目: 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点. 示例 1: 输入:root = [4, ...

  7. 算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)

    文章目录 剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树: 样例 1: 限制: 分析 题解 rust go c++ java python 原题传送门:https://leetcode. ...

  8. 代码随想录【day 14 二叉树】| 层序遍历 226.翻转二叉树 101.对称二叉树

    代码随想录[day 14 二叉树]| 层序遍历 226.翻转二叉树 101.对称二叉树 层序遍历 卡哥文解 视频讲解 题目链接:102.二叉树的层序遍历 解题思路 代码实现 题目链接:107.二叉树的 ...

  9. LeetCode 129. 求根到叶子节点数字之和(DFS)

    1. 题目 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到叶子节 ...

最新文章

  1. response返回一段html,iframe调用后台方法通过response返回html代码
  2. 我在北京工作这几年 – 一个软件工程师的反省
  3. Anolis 安装图解
  4. linux下root密码修改方法
  5. LeetCode 1784. 检查二进制字符串字段
  6. PowerBI,自定义编辑同一页面中不同图表之间的交互,使页面交互更灵活
  7. python pexpect输出_关于多线程:如何使用pexpect获取python中子进程的自发输出
  8. 十八、数据容器、数据访问宽度、端口(计算机对数据处理方式:读取、写入、运算;数据可存放三个地方:CPU内部、内存、端口)
  9. Cocos2d-x win7 + vs2010 配置图文详解(转)
  10. windows下SBT的安装与使用
  11. 在集合点的同步 CyclicBarrier
  12. imx385驱动、imx307驱动、imx327驱动调试记录
  13. Mac 下如何添加网段
  14. 简述windows计算机启动过程,计算机启动过程
  15. 二分算法。yxc教的
  16. vim高亮多处,搜索多个关键词
  17. Windows系统自带的DOS窗口
  18. 用python 画太阳_Python PIL画一个太阳神的圆圈
  19. PCA参数,属性,接口列表
  20. java web 课堂笔记第一

热门文章

  1. 解决Django 忘记超级管理员密码 重设密码登录教程
  2. c语言指针数组课件,C语言指针与数组教程课件.ppt
  3. python 垃圾回收机制
  4. 为什么析构函数可以能声明为虚函数,构造函数不可以
  5. ajax改变json指向,Ajax遍历jSon后对每一条数据进行相应的修改和删除(代码分享)
  6. 使用jQuery异步传递含复杂属性及集合属性的Model到控制器方法
  7. ios开发网络篇—HTTP协议 - 转
  8. bzoj 4827 [Hnoi2017]礼物——FFT
  9. Dojo API中文 Dojo内容模块概览,初学者
  10. nodejs在cmd提示不是内部或外部命令解决方法