题目描述
给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。
两节点之间路径的 长度 由它们之间边数表示。
出处
思路
对于每一个节点以其为根的子树的直径就是其左右子树深度之和.
代码
#include <cmath>
class Solution {
public:
void acc_h(TreeNode* root,int t,int& h){
if(!root) return;
t++;
if(t>h)
h=t;
if(root->left) acc_h(root->left,t,h);
if(root->right) acc_h(root->right,t,h);
}
void calculateDepth(TreeNode* root, int& max_Depth) {
int h=0,t=0;
acc_h(root,t,h);
root->val=h;
int a=0,b=0;
if(root->left) {
calculateDepth(root->left,max_Depth);
a=root->left->val;
}
if(root->right){
calculateDepth(root->right,max_Depth);
b=root->right->val;
}
max_Depth=max(max_Depth,a+b);
}
int diameterOfBinaryTree(TreeNode* root) {
int max_Depth=0;
calculateDepth(root,max_Depth);
return max_Depth;
}
};