思路:
diameter保存最大的直径,每次更新该值
depthOfBinary利用分治算法计算树的深度:分解为子问题,分别求得左右子树的深度lDepth,rDepth,两者相加+2就是该节点下的最大直径。
代码:
class Solution { public: int diameter = 0; int diameterOfBinaryTree(TreeNode* root) { depthOfBinaryTree(root); return diameter; } int depthOfBinaryTree(TreeNode* root){ if(root == NULL){ return -1; } int lDepth = depthOfBinaryTree(root->left); int rDepth = depthOfBinaryTree(root->right); diameter = max(diameter,lDepth+rDepth+2); return max(lDepth, rDepth) + 1; } };