标题:513找树左下角的值-中等
题目
给定一个二叉树的 根节点
root
,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。
示例1
输入: root = [2,1,3]
输出: 1
示例2
输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7
提示
- 二叉树的节点个数的范围是
[1,104]
-231 <= Node.val <= 231 - 1
代码Java
// 1. 层序遍历 返回 最左叶子节点
public int findBottomLeftValue1(TreeNode root) {
int ans = 0;
if (root == null) return ans;
Deque<TreeNode> deque = new LinkedList<>();
deque.add(root);
while (!deque.isEmpty()) {
int size = deque.size();
ans = deque.peekFirst().val;
for (int i = 0; i < size; i++) {
TreeNode node = deque.pollFirst();
if (node.left != null) deque.add(node.left);
if (node.right != null) deque.add(node.right);
}
}
return ans;
}
// 2. 递归 前序遍历+最大深度
private int Deep = -1;
private int ans = 0;
public int findBottomLeftValue(TreeNode root) {
ans = root.val;
find(root, 0);
return ans;
}
public void find(TreeNode root, int deep) {
if (root == null) return;
if (root.left == null && root.right == null) {
if (deep > Deep) {
ans = root.val;
Deep = deep;
}
}
if (root.left != null) find(root.left, deep + 1);
if (root.right != null) find(root.right, deep + 1);
}