题目:
给定一个二叉树,在树的最后一行找到最左边的值。
示例 1:
输入: 2 / \ 1 3 输出: 1
示例 2:
输入: 1 / \ 2 3 / / \ 4 5 6 / 7 输出: 7
注意: 您可以假设树(即给定的根节点)不为 NULL。
解题思路:
层次遍历即可。
时间复杂度O(n)。
代码实现:
递归版本:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { private int maxDepth = -1; private TreeNode node = null; public int findBottomLeftValue(TreeNode root) { helper(root, 0); return node == null ? 0 : node.val; } public void helper (TreeNode p, int depth) { if (p == null) return; if (p.left == null && p.right == null && depth > maxDepth) { maxDepth = depth; node = p; } helper(p.left, depth + 1); helper(p.right, depth + 1); } }
层次遍历版本:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public int findBottomLeftValue(TreeNode root) { Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); TreeNode leftMost = root; while (!queue.isEmpty()) { int j = queue.size() - 1; for (int i = queue.size() - 1; i >= 0; i--) { TreeNode p = queue.poll(); if (i == j) leftMost = p; if (p.left != null) queue.offer(p.left); if (p.right != null) queue.offer(p.right); } } return leftMost.val; } }