首页 > 其他 > 详细

力扣 - 512. 找树左下角的值

时间:2020-11-17 19:23:41      阅读:41      评论:0      收藏:0      [点我收藏+]

题目

513. 找树左下角的值

思路1(BFS 广度优先搜索)

  • 本题用BFS好做,因为求得是最后一行的最左边的值
  • BFS广度优先搜索其实就是层序遍历
  • 层序遍历是一层一层的遍历,我们只需要在每层遍历开始将最左边的数记录下来即可
  • 遍历结束那个值就是结果了

代码

class Solution {
    public int findBottomLeftValue(TreeNode root) {
        Deque<TreeNode> q1 = new LinkedList<>();
        q1.offer(root);
        int res = 0;
        while (!q1.isEmpty()) {
            int size = q1.size();
            res = q1.peek().val;
            while (size > 0) {
                TreeNode node = q1.poll();
                if (node.left != null) {
                    q1.offer(node.left);
                }
                if (node.right != null) {
                    q1.offer(node.right);
                }
                size--;
            }
        }
        return res;
    }
}

复杂度分析

  • 时间复杂度:\(O(N)\),其中 N 为树的结点数量
  • 空间复杂度:\(O(N)\),其中 N 为树的结点数量

思路2(DFS 深度优先搜索)

  • 使用 DFS + 回溯 来获取结果
  • 由于我们是要获取最后一行的最左边的值,所以我们只需要一步一步找到最后一行即可
  • 搜索的叶子结点,那么就判断叶子结点是不是最深的,如果是的话,就更新当前最深深度和最左边的值

代码

class Solution {
    int maxLength = Integer.MIN_VALUE;
    int leftValue = 0;


    public int findBottomLeftValue(TreeNode root) {
        backTrack(root, 0);
        return leftValue;
    }

    public void backTrack(TreeNode node, int length) {
        if (node.left == null && node.right == null) {
            if (length > maxLength) {
                maxLength = length;
                leftValue = node.val;
            }
            return;
        }
        
        // 选择路径:left和right
        if (node.left != null) {
            // 添加选择
            length++;
            // 进入下一层决策树
            backTrack(node.left, length);
            // 删除选择
            length--;
        }
        if (node.right != null) {
            length++;
            backTrack(node.right, length);
            length--;
        }
    }
}

复杂度分析

  • 时间复杂度:\(O(N)\),其中 N 为树的结点数量
  • 空间复杂度:\(O(H)\),其中 H 为树的高度,即 logN

力扣 - 512. 找树左下角的值

原文:https://www.cnblogs.com/linzedian/p/13995494.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!