• 刷题-力扣-543. 二叉树的直径


    543. 二叉树的直径

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/diameter-of-binary-tree
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目描述

    给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。

    示例 :
    给定二叉树

              1
             / 
            2   3
           /      
          4   5    
    

    返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。

    注意:两结点之间的路径长度是以它们之间边的数目表示。

    题目分析

    1. 根据题目描述求二叉树的直径
    2. 二叉树的直径可以分解为二叉树中某个节点的左子树的深度加上右子树的深度再加1,故问题转换为求二叉树中所有节点的深度
    3. 深度优先搜索遍历二叉树求节点的深度

    代码

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
     * };
     */
    class Solution {
    public:
        int diameterOfBinaryTree(TreeNode* root) {
            depth(root);
            return maxDepth;
        }
    
    private:
        int maxDepth = 0;
    
        int depth(TreeNode* root) {
            if (!root) return 0;
            int left = depth(root->left);
            int right = depth(root->right);
            maxDepth = max(maxDepth, left + right);
            return max(left, right) + 1;
        }
    };
    
  • 相关阅读:
    2019-05-11 java学习日记
    2019-05-14 Java学习日记 day4
    2019-05-13 Java学习日记 day3
    2019-05-12 Java学习日记day2
    2019-05-11 java学习日记day1
    数据库的比较
    函数调用
    求平均数,排列顺序为降序
    遍历三维数组
    由大到小排列
  • 原文地址:https://www.cnblogs.com/HanYG/p/15205156.html
Copyright © 2020-2023  润新知