742. Closest Leaf in a Binary Tree查找最近的叶子节点
[抄题]:
Given a binary tree where every node has a unique value, and a target key k
, find the value of the nearest leaf node to target k
in the tree.
Here, nearest to a leaf means the least number of edges travelled on the binary tree to reach any leaf of the tree. Also, a node is called a leaf if it has no children.
In the following examples, the input tree is represented in flattened form row by row. The actual root
tree given will be a TreeNode object.
Example 1:
Input:
root = [1, 3, 2], k = 1
Diagram of binary tree:
1
/ \
3 2 Output: 2 (or 3) Explanation: Either 2 or 3 is the nearest leaf node to the target of 1.
Example 2:
Input:
root = [1], k = 1
Output: 1 Explanation: The nearest leaf node is the root node itself.
Example 3:
Input:
root = [1,2,3,4,null,null,null,5,null,6], k = 2
Diagram of binary tree:
1
/ \
2 3
/
4
/
5
/
6 Output: 3
Explanation: The leaf node with value 3 (and not the leaf node with value 6) is nearest to the node with value 2.
[暴力解法]:
时间分析:
空间分析:
[优化后]:
时间分析:
空间分析:
[奇葩输出条件]:
[奇葩corner case]:
[思维问题]:
不知道还要找点,把路径存在hashmap中
[英文数据结构或算法,为什么不用别的数据结构或算法]:
[一句话思路]:
bfs的过程中,cur节点的左、右、map中存储的路径都要放进q
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
[一刷]:
- dfs函数的作用是返回有效的 值为k的节点,所以结果是左右节点的时候也需要返回
- 左右节点均为空的时候,再返回root.val的数值
[二刷]:
- dfs函数中,先把左节点放进去,再返回整个的left
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
用map存路径map.put(root.left, root);,然后用dfs找到k
[复杂度]:Time complexity: O(n) Space complexity: O(n)
[算法思想:迭代/递归/分治/贪心]:
[关键模板化代码]:
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
[代码风格] :
[是否头一次写此类driver funcion的代码] :
[潜台词] :
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int findClosestLeaf(TreeNode root, int k) {
//corner case
if (root == null) return -1; //initialiazation: map, q
//put first node into q, add left, right, route
HashMap<TreeNode, TreeNode> map = new HashMap<TreeNode, TreeNode>();
PriorityQueue<TreeNode> q = new PriorityQueue<TreeNode>();
TreeNode match = dfsTree(k, root, map); q.add(match);
while (!q.isEmpty()) {
TreeNode cur = q.poll();
if (cur.left == null && cur.right == null) return cur.val;
if (cur.left != null) q.add(cur.left);
if (cur.right != null) q.add(cur.right);
if (map.containsKey(cur)) {
q.add(map.get(cur));
map.remove(cur);
}
} return -1;
} public TreeNode dfsTree(int k, TreeNode root, Map<TreeNode, TreeNode> map) {
//corner case : null
if (root == null) return null; //return if left & right is null
if (root.val == k) return root; //put left into map and return left
if (root.left != null) {
map.put(root.left, root);
TreeNode left = dfsTree(k, root.left, map);
if (left != null) return left;
} //put left into map and return left
if (root.right != null) {
map.put(root.right, root);
TreeNode right = dfsTree(k, root.right, map);
if (right != null) return right;
} //return null
return null;
}
}
742. Closest Leaf in a Binary Tree查找最近的叶子节点的更多相关文章
- LeetCode 742. Closest Leaf in a Binary Tree
原题链接在这里:https://leetcode.com/problems/closest-leaf-in-a-binary-tree/ 题目: Given a binary tree where e ...
- [LeetCode] Closest Leaf in a Binary Tree 二叉树中最近的叶结点
Given a binary tree where every node has a unique value, and a target key k, find the value of the n ...
- Leetcode: Closest Leaf in a Binary Tree
Given a binary tree where every node has a unique value, and a target key k, find the value of the n ...
- jquery zTree 查找所有的叶子节点
jquery zTree 查找所有的叶子节点 // 保存所有叶子节点 10 为初始化大小,并非数组上限 var arrayObj = new Array([10]); /* treeNode: 根节点 ...
- [LeetCode] Find Leaves of Binary Tree 找二叉树的叶节点
Given a binary tree, find all leaves and then remove those leaves. Then repeat the previous steps un ...
- [LeetCode] 366. Find Leaves of Binary Tree 找二叉树的叶节点
Given a binary tree, find all leaves and then remove those leaves. Then repeat the previous steps un ...
- easyui tree 判断是否是叶子节点
<input class="add" id="add" style="display: none" type="submit ...
- [leetcode]236. Lowest Common Ancestor of a Binary Tree 二叉树最低公共父节点
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...
- [LeetCode] 298. Binary Tree Longest Consecutive Sequence 二叉树最长连续序列
Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...
随机推荐
- Centos7 下安装VMware tools
1:先在虚拟机点击安装VMware Tools 2:然后挂载 mount /dev/cdrom /mnt 3:进入/mnt,可以看到有 4:拷贝VMwareTools到其他 ...
- centos7以rpm方法装mysql5.7及大坑
环境: CentOS Linux release 7.5.1804 (Core) Mysql版本: MySQL-5.7.17-1.el6.x86_64.rpm-bundle.tar 下载地址( ...
- sqlserver乱码问题解决
* 如果是自己创建的数据库那么就应该在一开始就选择排序规则中的:Chinese_PRC_CI_AS 1.改变排序规则方法: 右击创建的数据库,属性→选项→排序规则中选择:Chinese_PRC_CI_ ...
- 血红蛋白值的临床意义(hemoglobin ,Hb,HGB)
血红蛋白临床意义: 血红蛋白增高.降低的临床意义基本和红细胞计数的临床意义相似,但血红蛋白能更好地反映贫血的程度. 血红蛋白增多有以下情况: (1)生理性增多:见于高原居民.胎儿和新生儿,剧烈活动 ...
- Excel函数之sumifs应用
这个函数是用来进行多条件求和的一个函数 示例:根据表格求出“鼎盛书店”2012年度所有图书小计的总和,这里就用sumifs计算 首先定位结果输出单元格,祭出函数. sum_range参数就是筛选后需要 ...
- opencv::将两幅图像合并后,在同一个窗口显示;并将合并的图像流保存成视频文件
/** * @file main-opencv.cpp * @date July 2014 * @brief An exemplative main file for the use of ViBe ...
- C#编程经验-enum and struct
enum,store fixed values,use array replace,not use this data-structurestruct,store several variables, ...
- 并发之volatile底层原理
15.深入分析Volatile的实现原理 14.java多线程编程底层原理剖析以及volatile原理 13.Java中Volatile底层原理与应用 12.Java多线程-java.util.con ...
- DBUS 的学习 概念清晰
dbus里面 name和path 怎么确定的,xml的不准确: 后来发现这个应该是在写debus server的时候自己制定的,xml只是理论上应该和这个保持一致 D-Bus三层架构 D-Bus是一个 ...
- (整理)MySQL_REHL6.5 安装MySQL5.5
1 根据系统选择Mysql版本 https://dev.mysql.com/downloads/mysql/5.5.html?os=31&version=5.1 在命令行的方式下,REHL/C ...