二叉树的直径(LeetCode543.二叉树的直径)

题目

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。


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;
    }
}

你可能感兴趣的:(二叉树的直径(LeetCode543.二叉树的直径))