zoukankan      html  css  js  c++  java
  • LeetCode543. Diameter of Binary Tree

    Description

    Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root.

    Example:
    Given a binary tree
    1
    /
    2 3
    /
    4 5
    Return 3, which is the length of the path [4,2,1,3] or [5,2,1,3].

    my program

    思路:int depth(TreeNode* root) 求树的高度,int depthDiff(TreeNode* root)求root的左子树和右子树的高度和。递归求树的diameter

    class Solution {
    public:
        int depth(TreeNode* root)
        {
            if (root == NULL) return 0;
            return max(depth(root->left),depth(root->right))+1;
        }
    
        int depthDiff(TreeNode* root)
        {
            if(root == NULL) return 0;
            return depth(root->left)+depth(root->right);
        }
    
        int diameterOfBinaryTree(TreeNode* root) {
            if(root == NULL) return 0;
            return max(depthDiff(root),max(diameterOfBinaryTree(root->left),diameterOfBinaryTree(root->right)));
        }
    };

    Submission Details
    106 / 106 test cases passed.
    Status: Accepted
    Runtime: 19 ms
    Your runtime beats 18.82 % of cpp submissions.

    other methods

    C++ Solution with DFS

    class Solution {
    public:
        int maxdiadepth = 0;
    
        int dfs(TreeNode* root){        
            if(root == NULL) return 0;
    
            int leftdepth = dfs(root->left);
            int rightdepth = dfs(root->right);
    
            if(leftdepth + rightdepth > maxdiadepth) maxdiadepth = leftdepth + rightdepth;
            return max(leftdepth +1, rightdepth + 1);     
        }
    
        int diameterOfBinaryTree(TreeNode* root) {        
            dfs(root);
    
            return maxdiadepth;
        }
    };

    C++_Recursive_with brief explanation

    class Solution {
    public:
        int diameterOfBinaryTree(TreeNode* root) {
            if(root == nullptr) return 0;
            int res = depth(root->left) + depth(root->right);
            return max(res, max(diameterOfBinaryTree(root->left), diameterOfBinaryTree(root->right)));
        }
    
        int depth(TreeNode* root){
            if(root == nullptr) return 0;
            return 1 + max(depth(root->left), depth(root->right));
        }
    };
  • 相关阅读:
    Atitit. C#.net clr 2.0 4.0 4.5新特性 v2 s22 1. CLR内部结构 1 2. CLR 版本发展史 3 3. CLR 2.0新特性 4 4. CLR 4 新特性
    Hbase基本命令 悟寰轩
    mvn常用命令 悟寰轩
    linux添加tomcat服务 悟寰轩
    hadoop基本命令 悟寰轩
    Tomcat启动 悟寰轩
    Eclipse自动部署项目到Tomcat的webapps下的有效方法 悟寰轩
    MySQL改变默认编码为utf8 悟寰轩
    myeclipse关闭自动更新 悟寰轩
    Linux命令大全 悟寰轩
  • 原文地址:https://www.cnblogs.com/yangjiannr/p/7391344.html
Copyright © 2011-2022 走看看