LeetCode 剑指 Offer II 045. 二叉树最底层最左边的值
题目描述
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例 1:
输入: root = [2,1,3]
输出: 1
LeetCode 剑指 Offer II 045. 二叉树最底层最左边的值
提示:
二叉树的节点个数的范围是 [1,104]
-231 <= Node.val <= 231 - 1
一、解题关键词
最底层 最左边、树
二、解题报告
1.思路分析
2.时间复杂度
3.代码示例
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int findBottomLeftValue(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int result = root.val;
while(!queue.isEmpty()){
int lg = queue.size();
for(int i = 0; i < lg;i++){
TreeNode node = queue.poll();
if(i == 0)result = node.val;
if(node.left != null){
queue.add(node.left);
}
if(node.right != null){
queue.add(node.right);
}
}
}
return result;
}
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
int ans = 0;
int maxDepth = -1;
public int findBottomLeftValue(TreeNode root) {
dfs(root,0);
return ans;
}
void dfs(TreeNode root,int depth){
if(root == null) return;
if(depth > maxDepth){
ans = root.val;
maxDepth = depth;
}
dfs(root.left,depth + 1);
dfs(root.right,depth + 1);
}
}
2.知识点
深度优先 & 广度优先两种方法