0
点赞
收藏
分享

微信扫一扫

【LeetCode543】二叉树的直径(还是深度)

杨沐涵 2022-07-14 阅读 51


1.题目

【LeetCode543】二叉树的直径(还是深度)_结点

2.思路

(1)求二叉树的直径,将问题拆解为求每个结点的左子树高度和右子树高度相加​​l+r​​​,求所有结点对应的​​l+r​​的最大值。

(2)关于二叉树的深度之前做过 【LeetCode111】二叉树的最小深度,在之前这题基础上,加多了一个判断。

——因为如果出现下图的二叉树时:

【LeetCode543】二叉树的直径(还是深度)_二叉树_02


并按照111题的做法统计出根结点1的左子树和右子树的深度相加,即为3+0=3(非正确答案),而正确答案为4(叶结点之间的最长距离为4,即6-4-2-5-3)

(3)所以需要维护一个maxn,遍历每个结点时,若当前结点的​​l+r​​比maxn大则替换。

3.代码

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
int maxn=0;
public:
int depth(TreeNode* index){
if(index==NULL){
return 0;//空结点
}
int l=depth(index->left);
int r=depth(index->right);
if(l+r>maxn){
maxn=l+r;
}
return max(l,r)+1;
}
int diameterOfBinaryTree(TreeNode* root) {
depth(root);
return maxn;
}
};

【LeetCode543】二叉树的直径(还是深度)_结点_03


举报

相关推荐

0 条评论