刷题-力扣-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;
    }
};
posted @ 2021-08-30 11:29  韩亚光  阅读(37)  评论(0编辑  收藏  举报