【算法】平衡二叉树

【算法】平衡二叉树

https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=188&tqId=38033&rp=1&ru=%2Factivity%2Foj&qru=%2Fta%2Fjob-code-high-week%2Fquestion-ranking&tab=answerKey


1.题目


2.推荐解法

  • 代码

    import java.util.*;
    import java.lang.Math;
    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    
    /**
     * @title 平衡二叉树
     * @description 使用自底向上递归的思想:
     * 计算当前节点子树的高度,左右子树继续递归计算。
     * 在递归过程中发现有子树不符合平衡条件,直接返回-1。
     * @author musecho801
     * @date 2021/3/13 13:30
     */
    public class Solution {
        public boolean IsBalanced_Solution(TreeNode root) {
            return subTreeHeight(root)!=-1;
        }
        
        //计算子树高度
        //返回-1说明不平衡
        public int subTreeHeight(TreeNode root){
            if(root==null) return 0;
            
            int left=subTreeHeight(root.left);
            //左子树不平衡,提前结束
            if(left==-1) return -1;
            
            int right=subTreeHeight(root.right);
            //右子树不平衡,提前结束
            if(right==-1) return -1;
            
            //本子树不平衡
            if(!(Math.abs(left-right)<=1))
                return -1;
            
            //本子树平衡,返回包含当前根节点的子树高度
            return 1+(left>right?left:right);
        }
        
    }
    
posted @ 2021-03-13 13:42  musecho  阅读(84)  评论(0)    收藏  举报