小工具知识网

当前位置: 首页 > 行业知识 > 力扣543. 二叉树的直径

行业知识

力扣543. 二叉树的直径

2026-11-06 19:06:52 来源:互联网转载

Problem: 543. 二叉树的直径

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

    题目描述

    思路

    1.最大直径 == 左子树的最大深度 + 右子树的最大深度;

    2.定义一个变量maxDiameter记录最大直径,并编写一个递归函数maxDepth,利用树的后序遍历每次递归求取leftMax(左子树的最大深度)和rightMax(右子树的最大深度),同时更新maxDiameter(maxDiameter == max(maxDiameter, (leftMax + rightMax)));递归函数每次返回1 + max(leftMax, rightMax)

    复杂度

    时间复杂度:

    O ( n ) O(n) O(n);其中 n n n为数的节点个数

    空间复杂度:

    O ( h ) O(h) O(h);其中 h h h为树的高度

    Code

    /** * 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 {    //Maximum recorded diameter    int maxDiameter = 0;public:    /**     *Find the maximum diameter     *     * @param root The root of binary tree     * @return int     */    int diameterOfBinaryTree(TreeNode* root) {        maxDepth(root);        return maxDiameter;    }    /**     * Post-order traversal     *     * @param root The root of binary tree     * @return int     */    int maxDepth(TreeNode* root) {        if (root == nullptr) {            return 0;        }        int leftMax = maxDepth(root -> left);        int rightMax = maxDepth(root -> right);        //After the order position, find the maximum diameter        int myDiameter = leftMax + rightMax;        maxDiameter = max(myDiameter, maxDiameter);        return 1 + max(leftMax, rightMax);    }};

上一篇:Matlab求矩阵的逆,3种常用方法总结

下一篇:服务器加密后怎么用?