leetcode中等513找树左下角的值
Posted qq_40707462
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode中等513找树左下角的值相关的知识,希望对你有一定的参考价值。
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
思路一:层序遍历
class Solution {
public int findBottomLeftValue(TreeNode root) {
if(root==null) return 0;
List<TreeNode>que=new ArrayList<>();
que.add(root);
int res=0;//每一行最左边
while(que.size()!=0){
int l=que.size();
for(int i=0;i<l;i++){
TreeNode node=que.remove(0);
if(i==0) res=node.val;
if(node.left!=null) que.add(node.left);
if(node.right!=null) que.add(node.right);
}
}
return res;
}
}
思路二:回溯
1、正常回溯
class Solution {
public int maxDeep=-1;
public int res=0;
public int findBottomLeftValue(TreeNode root) {
res=root.val;
find(root,0);
return res;
}
public void find(TreeNode root,int deep){
if(root==null) return;
if(root.left==null && root.right==null){
if(deep>maxDeep){
maxDeep=deep;
res=root.val;
}
}
if(root.left!=null){
deep++;
find(root.left,deep);
deep--;//回溯
}
if(root.right!=null){
deep++;
find(root.right,deep);
deep--;
}
}
}
2、函数参数里隐藏回溯
class Solution {
public int maxDeep=-1;
public int res=0;
public int findBottomLeftValue(TreeNode root) {
res=root.val;
find(root,0);
return res;
}
public void find(TreeNode root,int deep){
if(root==null) return;
if(root.left==null && root.right==null){
if(deep>maxDeep){
maxDeep=deep;
res=root.val;
}
}
//回溯直接放进参数里
if(root.left!=null){
find(root.left,deep+1);//不能deep++!!!
}
if(root.right!=null){
find(root.right,deep+1);
}
}
}
以上是关于leetcode中等513找树左下角的值的主要内容,如果未能解决你的问题,请参考以下文章
Python描述 LeetCode 513. 找树左下角的值
LeetCode 513 找树左下角的值[BFS 二叉树] HERODING的LeetCode之路
Python描述 LeetCode 513. 找树左下角的值