难度:简单
频次:57
题目:
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
解题思路:递归方法
注意:
- 类似使用递归的有
- leetcode 110. 平衡二叉树
- leetcode 104. 二叉树的最大深度 - 其实本质就是求某一个节点左右子树深度和【left+right】的最大值
- 在递归循环体里添加一个res,负责添加每一个节点的左右子树深度和,最后返回res最大值即可。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int diameterOfBinaryTree(TreeNode root) {
List<Integer> res=new ArrayList<>();
Maxdepth(root,res);
return Collections.max(res);
}
//求以这个节点为root的树的最大深度(包括这个节点)
public int Maxdepth(TreeNode root,List<Integer> res){
if(root==null) return 0;
//算出左子树的最大深度和右子树的最大深度
int left=Maxdepth(root.left,res);
int right=Maxdepth(root.right,res);
//记录以这个节点为root的最大直径
res.add(left+right);
//返回以root为节点的最大深度
return Math.max(left,right)+1;
}
}