题意:计算二叉树的直径
思路:后跟遍历树的每一个节点,并取得最大值,详情见代码
思想:树的后跟遍历
复杂度:时间O(n),空间O(n)
class Solution {
int max = 0;
public int diameterOfBinaryTree(TreeNode root) {
find(root);
return max;
}
// 获取最长的子树
int find(TreeNode root) {
if(root == null)
return 0;
// 获取最长的左子树
int left = find(root.left);
// 获取最长的右子树
int right = find(root.right);
// 获取最长的已经遍历过的左右子树和
max = Math.max(max, left+right);
// 返回最长的子树
return Math.max(left, right) + 1;
}
}