力扣今日题513. 找树左下角的值
513. 找树左下角的值
想法很简单,分别遍历左右子树(前序遍历),到达最大深度时第一次遇到的节点就是最底层最左边
的节点。
设置一个变量maxDepth
用来记录树
的最大深度,再设置一个变量depth
来记录当前遍历到的深度,这两个值的初始值都设置为0
,设置一个树节点,用来保存结果节点。
在遍历的递归遍历的过程中,如果发现当前遍历的深度depth
要大于maxDepth
的最大深度,那么就给maxDepth
赋值,保证它数据永远在更新,且永远是最大的。同时让res
永远指向最深的结点。
class Solution {
//记录树的最大深度
int maxDepth = 0;
//记录traverse 递归遍历到的深度
int depth = 0;
//结果结点,用来保存最底层最左边的结点
TreeNode res = null;
public int findBottomLeftValue(TreeNode root) {
traverse(root);
return res.val;
}
void traverse(TreeNode root){
if(root == null){
return ;
}
//前序遍历的位置
depth++;
if(depth > maxDepth){
//到达最大深度时,第一次遇到的节点就是最底层最左边的结点
maxDepth = depth;
res = root;
}
traverse(root.left);
traverse(root.right);
//后序遍历位置,返回根结点,遍历深度减一
depth--;
}
}