美文网首页
二叉树的深度和平衡二叉树(LeetCode 剑指Offer 55

二叉树的深度和平衡二叉树(LeetCode 剑指Offer 55

作者: 雁阵惊寒_zhn | 来源:发表于2020-11-08 22:02 被阅读0次

    题目

    1. 输入一棵二叉树的根节点,求该树的深度。
    2. 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。

    二叉树的深度

    解析

    递归实现。递归的边界条件是节点为null,返回高度为0。否则递归求解左右子树高度,取较大的值加1,为当前节点的高度。

    代码

    public int maxDepth(TreeNode root) {
        if(null == root){
            return 0;
        }
        int leftDepth = maxDepth(root.left);
        int rightDepth = maxDepth(root.right);
        return leftDepth > rightDepth ? (leftDepth + 1) : (rightDepth + 1);
    }
    

    判断平衡二叉树

    解析

    递归实现。在上一题求解树深度的基础上,每个输入的节点,首先节点若为null,则是平衡的。否则,计算左右子树的深度,判断是否符合平衡二叉树要求。如果符合,递归判断左右子树是否符合平衡二叉树要求。

    代码

    public boolean isBalanced(TreeNode root) {
        //如果当前节点为null,深度为0。
        if(null == root){
            return true;
        }
        //分别求解左右子树高度,然后判断当前节点是否符合平衡二叉树要求
        int left = depth(root.left);
        int right = depth(root.right);
        if(Math.abs(left - right) > 1){
            return false;
        }
        //递归判断左右子树是否符合平衡二叉树要求
        return isBalanced(root.left) && isBalanced(root.right);
    }
    
    //如上题,求解节点的深度
    private int depth(TreeNode node){
        if(null == node){
            return 0;
        }
        int left = depth(node.left);
        int right = depth(node.right);
        return left > right ? (left + 1) : (right + 1);
    }
    

    相关文章

      网友评论

          本文标题:二叉树的深度和平衡二叉树(LeetCode 剑指Offer 55

          本文链接:https://www.haomeiwen.com/subject/khfkmktx.html