1.题目
LeetCode: 513. 找树左下角的值
【medium】
给定一个二叉树,在树的最后一行找到最左边的值。
示例 1:
输入:
2
/ \
1 3
输出:
1
示例 2:
输入:
1
/ \
2 3
/ / \
4 5 6
/
7
输出:
7
注意: 您可以假设树(即给定的根节点)不为 NULL。
2.解题
方法一:队列 层次遍历
根据队列先进先出的特点,可以在层次遍历的时候,每次先进右孩子节点再进左孩子节点,遍历结束的最后一个节点即为左下角的节点。
java:
/**
* 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.offer(root);
while (!queue.isEmpty()) {
root = queue.poll();
if (root.right != null) queue.offer(root.right);
if (root.left != null) queue.offer(root.left);
}
return root.val;
}
}
时间复杂度:O(n),需要对每个节点遍历一次。
空间复杂度:O(n),取决于队列的空间占用。
3.相关知识
java中队列的offer和add的区别
offer(): 添加一个元素并返回true。如果队列已满,则返回false
add(): 增加一个元素。如果队列已满,则抛出一个IIIegaISlabEepeplian异常