1.题目介绍
给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 \(root\) 。
两节点之间路径的 长度 由它们之间边数表示。
示例 1:
输入:root = [1,2,3,4,5]
输出:3
解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。
示例 2:
输入:root = [1,2]
输出:1
提示:
- 树中节点数目在范围 \([1, 10^{4}]\) 内
- \(-100 <= Node.val <= 100\)
2.题解
2.1
思路
这题可以说 是二叉树最大深度的拓展,主体思路还是使用递归,从下往上分别求得左右子树的最大深度。
这时候通过当前层该根节点的节点数最大为:左子树最大深度+右子树最大深度+1,而最大直径等于这个值-1.
这里设置一个全局变量ans来存储这个最大直径时,每次计算一个根节点的最大深度同时,也计算出其最大直径并跟ans比较,更新ans值。
代码
class Solution {
public:
int ans;
int depth(TreeNode* root){
if (root == nullptr) return 0;
int left = depth(root->left);
int right = depth(root->right);
ans = max(ans, left + right);
return max(left,right) + 1;
}
int diameterOfBinaryTree(TreeNode* root) {
ans = 0;
depth(root);
return ans;
}
};
标签:int,543,二叉树,ans,直径,root,节点
From: https://www.cnblogs.com/trmbh12/p/17900205.html