Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root.
Example:
Given a binary tree
1 / \ 2 3 / \ 4 5
Return 3, which is the length of the path [4,2,1,3] or [5,2,1,3].
Note: The length of path between two nodes is represented by the number of edges between them.
Subscribe to see which companies asked this question.
这一题要我们求一棵树里面的最长路径。采用分治算法会使这题变得很容易解决。
一条最长路径,必定是由一个根的左子树和右子树来构成。只要我们计算出左子树最大深度max_left和右子树最大深度max_right,那么它们的和就是以这个根为中心的最长路径。我们可以定义一个整数max = 0,如果在某个根上,有 max_left + max_right > max,则更新max。每次递归返回该根的最大深度并加1 return max(max_right, max_left) + 1
代码如下:
/**
* 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 m = 0; //最大值
int find_max(TreeNode* root){
if (root == NULL) return NULL;
int left = find_max(root -> left);
int right = find_max(root -> right);
if (left + right > m)
m = left + right;
return max(left, right)+1;
}
int diameterOfBinaryTree(TreeNode* root) {
find_max(root);
return m;
}
};