LeetCode 543. 二叉树的直径

题目

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

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

题目链接

示例

      1
     / \
    2   3
   / \     
  4   5  

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

题目分析

这道题理解题意是个难点。实际上求得的结果与结点的值无关,只需要考虑每个结点的高度,而路径长度实际上就是找到一个结点,这个结点的左子树高度与右子树高度之和最大。

理解了题意,这道题就不是很难了。

可以递归求每个结点左右子树的高度:

int deep(tree root){
    if (root == NULL) return 0;
    int left = deep(root->left);
    int right = deep(root->right);
    return max(left, right) + 1;
}

在递归过程中,可以使用一个变量res,随时储存当前最大值,递归结束后直接输出res即可。


题目解答

class Solution {
public:
    int res = 0;

    int deep(TreeNode* root){
        if (root == NULL) return 0;
        int left = deep(root->left);
        int right = deep(root->right);
        
        if (left + right > res) res = left + right;

        return max(left, right) + 1;
    }

    int diameterOfBinaryTree(TreeNode* root) {
        int temp = deep(root);

        return res;
    }
};

你可能感兴趣的:(LeetCode 543. 二叉树的直径)