题目
思路
题目给一个二叉树,让找出一条经过节点数最多的路径,节点数-1称为这棵树的直径;
我们可以发现,对于每一个节点,如果最长路径经过这个节点,那么这条路径经过的
节点数目 = 其左子树的深度 + 其右子树的深度 + 1(自身);
那么我们就可以定义depth函数来求出以每个节点为根时的深度;
全局保存一个变量,用来存放经过的节点数,答案就是节点数-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 ans;
int depth(TreeNode* root){
if(!root)
return 0;
int left = 0, right = 0;
left = depth(root->left);
right = depth(root->right);
//如果经过当前节点,那么经过的节点总数一定是左子树深度+右子树深度+1
//叶子结点的深度为零
ans = max(ans, left+right+1);
return max(left, right)+1;
}
int diameterOfBinaryTree(TreeNode* root) {
ans = 1;
//depth函数求出以这个节点为根时,最长路径经过的节点数
depth(root);
return ans-1;
}
};