二叉树叶子顺序遍历 · binary tree leaves order traversal
[抄题]:
给定一个二叉树,像这样收集树节点:收集并移除所有叶子,重复,直到树为空。
给出一个二叉树:
1
/ \
2 3
/ \
4 5
返回 [[4, 5, 3], [2], [1]].
[暴力解法]:
时间分析:
空间分析:
[思维问题]:
- 觉得要用BFS。不知道用dfs怎么求高度:max(左,右)+1,这是高度的定义吧
- 只知道怎么摘,不知道要去尝试用数学表示出来:第k层扒下来的叶子节点,高度也是k
- 不知道怎么把一层的节点都存在一个hashmap中,觉得一个key不是只能存一个value么:hashmap的value可以存链表,不只可以存次数。
[一句话思路]:
相同高度的叶子节点在相同高度摘下来
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:

[一刷]:
- 以前的DFS函数没有输出,这里DFS可以有输出,不知道为什么:因为不可能主函dfs一次输出一次,干脆在dfs中全部输出。
- java8对哈希表的俩新方法是:putifabsent,getordefault
- 先写总表达式bfs(某节点),再写具体操作。实际执行是调用-调用-调用-调用……直到从最底端节点开始,所以是完全不应该有循环的。
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
- 先写总表达式bfs(某节点),再写具体操作。实际执行是调用-调用-调用-调用……直到从最底端节点开始,所以是完全不应该有循环的。
[复杂度]:Time complexity: O(n) Space complexity: O(n)
[英文数据结构或算法,为什么不用别的数据结构或算法]:
- 不知道怎么把一层的节点都存在一个hashmap中,觉得一个key不是只能存一个value么:hashmap的value可以存链表,不只可以存次数。
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
Find Leaves of Binary Tree
[代码风格] :
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/ public class Solution {
/*
* @param root: the root of binary tree
* @return: collect and remove all leaves
*/
HashMap<Integer, List<Integer>> map = new HashMap<>(); public List<List<Integer>> findLeaves(TreeNode root) {
//corner case
List<List<Integer>> ans = new LinkedList<>();
int max_height = bfs(root); for (int d = 1; d <= max_height; d++) {
ans.add(map.get(d));
} return ans;
} //bfs
//corner case
int bfs(TreeNode curt) {
if (curt == null) {
return 0;
}
int d = Math.max(bfs(curt.left), bfs(curt.right)) + 1;
map.putIfAbsent(d, new LinkedList<Integer>());
map.get(d).add(curt.val); return d;
}
}
二叉树叶子顺序遍历 · binary tree leaves order traversal的更多相关文章
- LeetCode 102. 二叉树的层次遍历(Binary Tree Level Order Traversal) 8
102. 二叉树的层次遍历 102. Binary Tree Level Order Traversal 题目描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 每 ...
- [Swift]LeetCode102. 二叉树的层次遍历 | Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- 二叉树的层次遍历 · Binary Tree Level Order Traversal
[抄题]: 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) [思维问题]: [一句话思路]: 用queue存每一层 [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况 ...
- (二叉树 BFS) leetcode 107. Binary Tree Level Order Traversal II
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...
- 二叉树垂直遍历 · Binary Tree Vertical Order Traversal
[抄题]: 给定二叉树,返回其节点值的垂直遍历顺序. (即逐列从上到下).如果两个节点在同一行和同一列中,则顺序应 从左到右. 给定一个二叉树 {3,9,20,#,#,15,7} 3 /\ / \ 9 ...
- [Swift]LeetCode314. 二叉树的竖直遍历 $ Binary Tree Vertical Order Traversal
Given a binary tree, return the vertical order traversal of its nodes' values. (ie, from top to bott ...
- LeetCode 107 Binary Tree Level Order Traversal II(二叉树的层级顺序遍历2)(*)
翻译 给定一个二叉树,返回从下往上遍历经过的每一个节点的值. 从左往右,从叶子到节点. 比如: 给定的二叉树是 {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7 返回它从下 ...
- [LeetCode] Binary Tree Vertical Order Traversal 二叉树的竖直遍历
Given a binary tree, return the vertical order traversal of its nodes' values. (ie, from top to bott ...
- LeetCode之Binary Tree Level Order Traversal 层序遍历二叉树
Binary Tree Level Order Traversal 题目描述: Given a binary tree, return the level order traversal of its ...
随机推荐
- maven项目目录结构 学习笔记
maven的约定 1.src/main/java--------------------------------存放项目的.java文件 2.src/main/resources----------- ...
- 第1课 学习C++的意义
C++是C语言的加强,它们之间并不是对立的关系. 学习C++的优势: 现代软件产品的架构图: 操作系统抽象层:可有可无,但是作为一个移植性好的软件一定需要这一层.这一层的作用就是把操作系统提供的接口做 ...
- Zabbix proxy 3.2安装部署
zabbix proxy 前提环境: CentOS 6 LNMP(php) 版本:Zabbix-3.2.3 proxy安装 yum install -y net-snmp \ net-snmp-dev ...
- SqlServer高级特性--游标
游标 用途:在数据很多的时候,如果在java代码中进行循环之后再进行更新数据,会造成频繁的连接数据库,耗费性能,所以就可以使用到游标 作用:查询出来的集合直接在SQL中进行遍历在进行更新 DECLAR ...
- cratedb nodejs 试用
安装cratedb docker run -d -p 4200:4200 crate nodejs 项目初始化 yarn yarn init -y 添加依赖 yarn add node-crate 基 ...
- Java多线程编程核心技术,第四章
1,ReentrantLock 2,object的wait(),wait(x),notify(),notifyAll(),分别等于Condition的await(),await(x,y),signal ...
- dell R730 安装windwos 2008 R2在windows loading files...完成后屏幕无信号(iDrac绿屏)
dell R730 安装windwos 2008 R2在windows loading files...完成后,Starting Windows时屏幕无信号(iDrac绿屏) 解决方法: F2 进行 ...
- 洛谷4294 [WC2008]游览计划——斯坦纳树
题目:https://www.luogu.org/problemnew/show/P4294 大概是状压.两种转移,一个是以同一个点为中心,S由自己的子集拼起来:一个是S相同.中心不同的同层转移. 注 ...
- panabit web认证界面个性化
原理:利用js代码在前端页面进行个性化 1.禁止信息提示 url:http://192.168.0.246:8010/restrict.htm 文件:restrict.png restrict.ht ...
- XSS 与 CSRF 两种跨站攻击
在前几年,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式, 但是现在参数化查询 已经成了普遍用法,我们已经离 SQL 注入很远了.但是历史同样悠久的 ...