zoukankan      html  css  js  c++  java
  • leetcode-0543 二叉树的直径

    题目地址https://leetcode-cn.com/problems/diameter-of-binary-tree/

    递归+BFS(暴力解法)

    我们可以考虑在每个节点时,都去计算该节点左子树和右子树的最大高度。这样会包含大量的重复计算在里面。时间复杂度O(n^2) 空间复杂度O(n)

    class Solution {
        public int diameterOfBinaryTree(TreeNode root) {
            int result = 0;
            Queue<TreeNode> queue = new LinkedList<>();
            if (root == null) return result;
    
            queue.offer(root);
            while(!queue.isEmpty()) {
                TreeNode node = queue.poll();
                int currMaxDepth = maxDepth(node.left) + maxDepth(node.right) + 1;
                if (currMaxDepth > result)
                    result = currMaxDepth;
                if (node.left != null)
                    queue.offer(node.left);
                if (node.right != null)
                    queue.offer(node.right);
            }
    
            return result - 1;
        }
        private int maxDepth(TreeNode node) {
            if (node == null)
                return 0;
            return Math.max(maxDepth(node.left), maxDepth(node.right)) + 1;
        }
    }
    

    2.递归+BFS(优化解法)

    其实之前的maxDepth方法,已经是访问了所有节点的左子树和右子树的最大高度,这里我们只需要用个全局变量来缓存这个最大值即可,时间复杂度O(n) 空间复杂度O(h) h为树的最大深度

    class Solution {
        private int max;
        public int diameterOfBinaryTree(TreeNode root) {
            max = 1;
            maxDepth(root);
            return max - 1;
        }
        private int maxDepth(TreeNode node) {
            if (node == null)
                return 0;
            int left = maxDepth(node.left);
            int right = maxDepth(node.right);
            max = Math.max(max, left + right + 1);
            return Math.max(left, right) + 1;
        }
    }
    

    更多LeetCode题解和数据结构方面的内容,可以关注我的github,求个star~ ▄█▔▉●

  • 相关阅读:
    vue修改项目名
    CAS5.3.0安装部署
    nginx 10054报错问题解决方案
    react安装 项目构建
    oracle ORA-00119, ORA-00132问题解决
    SQL Server
    centos7设置httpd
    centos7 firewalld 开放端口
    java日期间相隔年月日计算
    PLSQL僵死
  • 原文地址:https://www.cnblogs.com/guolizhi/p/12771618.html
Copyright © 2011-2022 走看看