leetcode543 二叉树的直径(Easy 不简单)

题目来源:leetcode543

题目描述:

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
注意:两结点之间的路径长度是以它们之间边的数目表示。

解题思路:

递归。任意一条路径均可以被看作由某个节点为起点,从其左儿子和右儿子向下遍历的路径拼接得到

/**
 * 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 {
public:
    int ans=0;
    int diameterOfBinaryTree(TreeNode* root) {
        depth(root);
        return ans-1;//边的数目
    }
    int depth(TreeNode* root){
        if(root==NULL) return 0;
        int l=depth(root->left);
        int r=depth(root->right);
        ans=max(ans,l+r+1);//结点数目
        return max(l,r)+1;
    }
};
posted @ 2020-07-08 11:00  拉里拉里啦啦  阅读(138)  评论(0编辑  收藏  举报