LeetCode刷题复盘笔记—543. 二叉树的直径

今日主要总结一下,543. 二叉树的直径

题目:543. 二叉树的直径

Leetcode题目地址

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

示例 :
给定二叉树

      1
     / \
    2   3
   / \     
  4   5    

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

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

L

本题重难点

这道题的重难点主要是要充分理解好题目,把求解二叉树的直径问题进行分解转化,从而最后判断出是使用二叉树的哪种遍历方式

  1. 题目说:一棵二叉树的直径长度是任意两个结点路径长度中的最大值,所以就把求整个二叉树的直径转化成求以任意一个节点作为根节点的一条二叉树的直径,
  2. 之后进一步分析转化问题:求每一条二叉树的「直径」长度,就是一个节点的左右子树的最大深度之和,把问题转化成比较常见的求二叉树最大深度的问题
  3. 这样分析下来,求二叉树最大深度就需要知道子树的最大深度,所以是个后序遍历,利用子树计算的结果自底向上得到答案!

一、正确解法

C++代码

class Solution {
public:
    int maxDiameter = 0;
    int maxDepth(TreeNode* node){
    // 函数定义:求每个节点对应二叉树的最大深度,并且更新所求最大直径
        if(!node) return 0;
        int left = maxDepth(node->left);
        int right = maxDepth(node->right);
        int maxD = max(left, right) + 1;
        int tmpDiameter = left + right;
        maxDiameter = max(maxDiameter, tmpDiameter);
        return maxD;
    }
    int diameterOfBinaryTree(TreeNode* root) {
        maxDepth(root);
        return maxDiameter;
    }
};

总结

这道题的重难点主要是要充分理解好题目,把求解二叉树的直径问题进行分解转化,从而最后判断出是使用二叉树的哪种遍历方式

  1. 题目说:一棵二叉树的直径长度是任意两个结点路径长度中的最大值,所以就把求整个二叉树的直径转化成求以任意一个节点作为根节点的一条二叉树的直径,
  2. 之后进一步分析转化问题:求每一条二叉树的「直径」长度,就是一个节点的左右子树的最大深度之和,把问题转化成比较常见的求二叉树最大深度的问题
  3. 这样分析下来,求二叉树最大深度就需要知道子树的最大深度,所以是个后序遍历,利用子树计算的结果自底向上得到答案!

欢迎大家扫码关注本人公众号:编程复盘与思考随笔

(关注后可以免费获得本人在csdn发布的资源源码)

公众号主要记录编程和刷题时的总结复盘笔记和心得!并且分享读书、工作、生活中的一些思考感悟!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Al资料站与复盘笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值