给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
很常规的DFS题,以后写DFS一定要越来越熟练!!!!!
一个路径等于该路径的节点数-1,过一个节点的路径等于它的左子树中最长节点数加右子树最长节点数,再加一,最后减一就是路径长度。
//DFS
class Solution {
public:
int lengthest;
int diameterOfBinaryTree(TreeNode* root) {
this->lengthest = 1;
dfs(root);
return this->lengthest - 1;
}
int dfs(TreeNode* root) {
if (NULL == root){
return 0;
}
int L = dfs(root->left);
int R = dfs(root->right);
this->lengthest = max(this->lengthest, L + R + 1);
return max(L, R) + 1;
}
};