图片.png
输出:
1
示例2:
输入:
图片.png
输出:
7
Note: 您可以假设树(即给定的根节点)不为NULL。
大意:
给定一个二叉树,找到树底行中最左边的节点值。
示例1:
进入:
图片.png
输出:
1
示例2:
进入:
图片.png
输出:
7
注意:您可以假设树(即给定根节点)非空。
思路:
这个问题其实可以分解为两个问题:
找到二叉树的底行;找到底行中最左边的节点值。需要说明的是,最左边的节点值不一定是左节点,也可以是最左边的右子节点值。
记得在传送门:LeetCode笔记:102.二叉树层序遍历中,我们要求逐层输出二叉树。然后通过同样的方法,我们使用BFS广度优先遍历的方法,利用队列保证底层的所有节点值都被找到,然后只需要使用一个标记来对位于的节点进行排序即可每次都是底层。记录左侧节点的值。这样,当确定是最后一层并且没有下一层时,我们记录的就是最低层最左边节点的值。
代码(Java):
/**
* 二叉树节点的定义。
* 公共类树节点{
* int 值;
*左树节点;
*右树节点;
* TreeNode(int x) { val=x; }
* }
*/
公共课解决方案{
公共int findBottomLeftValue(TreeNode root) {
Queuequeue=new LinkedList();
队列.offer(root);
int 结果=root.val;
布尔值有=false;
while (!queue.isEmpty()) {
int levelNum=队列.size();
for (int i=0; i levelNum; i++) {
if (queue.peek().left !=null) {
队列.offer(队列.peek().left);
如果(!有){
结果=queue.peek().left.val;
有=真;
}
}
if (queue.peek().right !=null) {
队列.offer(队列.peek().right);
如果(!有){
结果=queue.peek().right.val;
有=真;
}
}
队列.poll();
}
有=假;
}
返回结果;
}
}
他山之石:
我的方法其实比较慢。我们来看看下面的方法:
公共课解决方案{
公共int findBottomLeftValue(TreeNode root) {
返回findBottomLeftValue(root, 1, new int[]{0,0});
}
公共int findBottomLeftValue(TreeNode 根, int 深度, int[] res) {
if(res[1]方法的第一个好处就是代码确实比我的简单很多.他的做法其实和我第一个想法类似,用DFS向下递归查找,同时记录当前find 对于节点的深度,他使用了一个int数组res,数组的第一个元素记录了节点值,第二个元素记录了节点的深度,只有当进入更深的一层并且这一层还没有记录的时候。记录第一个找到的节点值,找到后,将深度标记为当前深度,那么后面找到的所有该深度的节点值将不再记录。除非找到更深的节点。这样继续下去,根据深度不断更新找到的节点值,最后找到最深层的最左边的节点值。
【LeetCode算法解析:513. 找到树的左下角的值笔记】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
又是LeetCode题目,刷题真的可以提高算法能力!
有7位网友表示赞同!
找树的最左下角的值?感觉有点像查找某个特定位置的元素。
有11位网友表示赞同!
这道题需要掌握一些树的遍历方法吧?
有5位网友表示赞同!
笔记很有用啊!以后遇到这类问题能节省很多时间。
有19位网友表示赞同!
LeetCode真是一门好课,可以学习到很多实用技能!
有17位网友表示赞同!
我最近也在学习数据结构算法,感觉LeetCode很适合练习。
有11位网友表示赞同!
这道题的解题思路可能需要仔细思考,分享笔记很有帮助啊!
有16位网友表示赞同!
LeetCode真是一款很棒的app,可以免费提供大量的练习题目。
有17位网友表示赞同!
喜欢这种类型的题目,感觉很有挑战性!
有8位网友表示赞同!
学习笔记的同时也可以理解算法原理,一举两得!
有18位网友表示赞同!
513 这题是不是挺难的?
有10位网友表示赞同!
LeetCode 上的题目还挺有趣,让人爱恨交加。
有15位网友表示赞同!
笔记清晰易懂,方便我理解和复习。
有8位网友表示赞同!
刷LeetCode真是太有效了!每次做完一道题都能学到新东西。.
有8位网友表示赞同!
希望这道题的解题笔记能帮我突破瓶颈!
有14位网友表示赞同!
LeetCode笔记真的可以成为学习指南。
有20位网友表示赞同!
最近在准备算法面试,这份笔记太棒了!
有8位网友表示赞同!
树问题确实挺难理解,看来要仔细研究一遍这道题的笔记。
有19位网友表示赞同!
刷题是一种很好的方式,不仅能提升技术能力,还能锻炼思维逻辑。
有8位网友表示赞同!
LeetCode 的难度还挺变化的,有时候简单,有时候真的让人头疼 。
有11位网友表示赞同!