题目
给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。
两节点之间路径的 长度 由它们之间边数表示。
思路
分析二叉树的直径,无非是一个节点加上左右子树的高度。只需遍历所有节点,找到结点的左右子树高度之和最大的即可。
代码
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:
int ans =0;int GetAns(TreeNode* root){if(!root){return 0;}int left = GetAns(root->left);int right = GetAns(root->right);int temp = left+right+1;if(temp>ans){ans=temp;}return max(left,right)+1;}int diameterOfBinaryTree(TreeNode* root) {GetAns(root);return ans-1; }
};