• 剑指39.平衡二叉树


    题目描述

    输入一棵二叉树,判断该二叉树是否是平衡二叉树。
     
    在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
     

    思路

    平衡二叉树:每个节点左右子树高度相差不超过1。
     
    思路1:最直接的做法,遍历每个结点,借助一个获取树深度的递归函数,根据该结点的左右子树高度差判断是否平衡,然后递归地对左右子树进行判断。
                 思路1的缺点是在判断上层节点时,会多次重复遍历下层节点,增加了不必要的开销。
                                                           
    思路2(剪枝):从下往上遍历(后序遍历),如果子树是平衡二叉树,则返回子树的高度;如果发现子树不是平衡二叉树,则直接停止遍历,这样至多对每个节点访问一次.(加剪枝,就是最优解啦~)
     

    解法1

    public class Solution {
        public boolean IsBalanced_Solution(TreeNode root) {
            if (root == null)  // 返回true哦
                return true;
            int leftDepth = treeDepth(root.left);
            int rightDepth = treeDepth(root.right);
            int diff = Math.abs(leftDepth - rightDepth);
            if (diff > 1) return false;   // 要返回一个和递归终止条件相反的结果
            return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
        }
        // 获取二叉树的深度
        private int treeDepth(TreeNode root){
            if (root == null) return 0;
            int left = treeDepth(root.left);
            int right = treeDepth(root.right);
            return Math.max(left,right) + 1;
        }
    }

    ☆☆解法2

    //如果不平衡,则令树的深度=-1,用来表示树不平衡。最终根据树的深度是否等于-1来确定是否为平衡树。
    //在判断出树不平衡后,进行剪枝(即代码中直接返回-1,不再对其他子树进行判断),以提高效率。
    public class Solution {
        public boolean IsBalanced_Solution(TreeNode root) {
            return getDepth(root) != -1;
        }
        private int getDepth(TreeNode root) {
            if (root == null) return 0;
            int left = getDepth(root.left);
            if (left == -1) return -1;
            int right = getDepth(root.right);
            if (right == -1) return -1;
            return Math.abs(left-right) > 1 ? -1 : Math.max(left,right) + 1;
        }
    }
  • 相关阅读:
    AJAX以及XMLHttpRequest
    理解Promise对象
    HTTP报文整理
    前端 — URL、URI、URN概念和区别整理,以及URL语法规则
    gulp与webpack的区别
    Sass和less的区别是什么?用哪个好
    Vue3.0 && Vue3.0初体验 一
    Promise入门详解和基本用法
    js对象方法大全
    hash模式和history模式 实现原理及区别
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/13555637.html
Copyright © 2020-2023  润新知