题目大意:问题很简单,要求你去找出一颗二叉树的树直径(树中最长路)
题目思路:对于树直径,我们首先可以想到这样的想法,我们在树中找一条最长路径,这条最长路径一一定是从一个叶子节点出发,到达另一个叶子节点,也就是说,实际上这一条路径一定是某一个非叶子节点的左子树高度加右子树高度,所以我们只需要在递归找树高度的情况下记录一下左右子树高度和即可
时间复杂度&&空间复杂度:O(n)&&O(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 maxx = 0;
int dfs(TreeNode* root){
if(root == NULL) return 0;
int l = dfs(root->left),r = dfs(root->right);
maxx = max(maxx,l+r);
return max(l,r)+1;
}
int diameterOfBinaryTree(TreeNode* root) {
int height = dfs(root);
return maxx;
}
};