543. 二叉树的直径
题目
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
解题思路
这题还是在 求子树最大深度的基础上改造。求出来每个节点的左子树最大深度 和右子树最大深度后,把这两个深度加起来 就是“两个结点路径长度中的最大值”。这样再定义一个成员变量max来保存最大的那个路径长度。
在每一次把每一个节点的左右子树的两个最大深度加起来后都把max和这个最大深度和进行比较,取大的值作为max。让max始终维护 节点路径长度最大,最后返回max即可。
代码
class Solution {
int max=0;
public int diameterOfBinaryTree(TreeNode root) {
MaxDepth(root);
return max ;
}
public int MaxDepth(TreeNode root){
if(root==null){
return 0;
}
int left=MaxDepth(root.left);
int right=MaxDepth(root.right);
max=Math.max(left+right,max);//将每个节点最大直径(左子树深度+右子树深度)和当前最大值比较并取大者。也就是max始终只保留最长的路径
return Math.max(left,right)+1;
}
}