题目
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
LeetCode543.二叉树的直径
解析
递归实现。每个节点穿过自己的最长直径是其左右子树的树高和(叶子节点树高为1),比较当前记录的最长直径,进行更新。递归函数返回给上一层的值是节点左右子树树高比较后的最大值加1。
代码
class Solution {
//这条路径可能穿过也可能不穿过根结点。
//记录的递归到的最大直径
int result = -1;
public int diameterOfBinaryTree(TreeNode root) {
if(null == root){
return 0;
}
maxPath(root);
return result;
}
//递归函数
private int maxPath(TreeNode node){
if(null == node){
return 0;
}
int lp = maxPath(node.left);
int rp = maxPath(node.right);
//每个节点穿过自己的最长直径是其左右子树的树高和(叶子节点树高为1)
//比较当前记录的最长直径,进行更新
result = (lp + rp) > result ? (lp + rp) : result;
//返回节点左右子树树高比较后的最大值加1
return lp > rp ? lp + 1 : rp + 1;
}
}
网友评论