嗨,大家好,我是袁厨(因为酷爱做饭,所以自己考取了厨师证)。之前一直看大家写的博客,学到了很多东西。然后最近萌生了自己写的想法,将自己知道的分享给需要的同学。以后每天会为大家分享leetcode精选题目的各种题解和Python, JS, JQ, CSS, PHP, JAVA的一些小Demo。请大家关注我,一起交流学习吧。
513. 找树左下角的值
题目描述层次遍历(BFS)做题思路题目代码
递归法做题思路题目代码
总结
题目描述
层次遍历(BFS)
做题思路
这个方法比较好想到,也比较容易,但是消耗的时间较多,主要思路就是,根据层次遍历,每次保存每一层的第一个值即可。然后等遍历完之后输出该值
题目代码
class Solution {
public int findBottomLeftValue(TreeNode root
) {
if(root
== null
){
return 0;
}
Queue
<TreeNode> queue
= new LinkedList<TreeNode>();
int leftnum
= 0;
queue
.offer(root
);
while(!queue
.isEmpty()){
int size
= queue
.size();
leftnum
= queue
.element().val
;
for(int i
= 0;i
< size
; i
++){
TreeNode p
= queue
.poll();
TreeNode left
= p
.left
;
TreeNode right
= p
.right
;
if(left
!= null
){
queue
.offer(left
);
}
if(right
!= null
){
queue
.offer(right
);
}
}
}
return leftnum
;
}
}
递归法
做题思路
我们可以需要定义两个变量,来找到最底层,当达到最底层时,将值赋给 maxlevelvalue也就是我们需要输出的值。
if(maxlen
< leftlen
){
maxlen
= leftlen
;
maxlevelvalue
= root
.val
;
}
题目代码
class Solution {
int maxlen
= 0;
int maxlevelvalue
= 0;
public int findBottomLeftValue(TreeNode root
) {
if(root
== null
){
return 0;
}
dfs(root
,1);
return maxlevelvalue
;
}
public void dfs(TreeNode root
,int leftlen
){
if(root
.left
== null
&& root
.right
== null
){
if(maxlen
< leftlen
){
maxlen
= leftlen
;
maxlevelvalue
= root
.val
;
}
return ;
}
if(root
.left
!= null
){
leftlen
++;
dfs(root
.left
,leftlen
);
leftlen
--;
}
if(root
.right
!= null
){
leftlen
++;
dfs(root
.right
,leftlen
);
leftlen
--;
}
return ;
}
}
当然这个代码是可以精简的,但是就显示不出来递归三要素啦,所以为了便于理解,先根据递归三要素理解完之后再精简吧。
总结
作者:LeetCode 链接:https://leetcode-cn.com/problems/rotate-array/solution/xuan-zhuan-shu-zu-by-leetcode/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。