题目:二叉树的直径
最开始的想法是:分别求左右子树的最大深度,之后再加上二就是二叉树的直径
但是这个方法仅仅只是”局部最优解“而非”全局最优解“,因为二叉树的直径也可能不会跨越根节点(比如当左子树为深度非常大的满二叉树,而右子树仅仅只有一个节点时,那么直径就会在左子树出现),因此需要判断直径的计算是否会跨越根节点
1int maxDepth(TreeNode* curr, int& max_dep)
2{
3 if(!curr) return 0;
4
5 int left_dep = maxDepth(curr->left, max_dep);
6 int right_dep = maxDepth(curr->right, max_dep);
7 max_dep = std::max(max_dep, left_dep + right_dep);
8 return std::max(left_dep, right_dep) + 1;
9}
10
11int diameterOfBinaryTree(TreeNode* root)
12{
13 int max_dep = 0;
14 maxDepth(root, max_dep);
15 return max_dep;
16}