平衡二叉树的条件:为空或者子树高度之差的绝对值小于等于1,且子树也是平衡二叉树

最直接的做法,遍历每个结点,借助一个获取树深度的递归函数,根据该结点的左右子树高度差判断是否平衡,然后递归地对左右子树进行判断。

public class Solution {

public boolean IsBalanced_Solution(TreeNode root) {

if(root == null ) return true;

int h = height(root.left) - height(root.right);

return Math.abs(h) == 1 || h == 0;

}

//获取以node为根节点的树的高度

int height(TreeNode node){

if(node == null) return 0;

return Math.max(height(node.left), height(node.right)) + 1;

}

}

但上述的做法有很明显的问题,在判断上层结点的时候,会多次重复遍历下层结点,增加了不必要的开销。如果改为从下往上遍历,如果子树是平衡二叉树,则返回子树的高度;如果发现子树不是平衡二叉树,则直接停止遍历,这样至多只对每个结点访问一次。

public class Solution {

public boolean IsBalanced_Solution(TreeNode root) {

return height(root) != -1;

}

int height(TreeNode root){

if(root == null) return 0;

int left = height(root.left);

if(left == -1) return -1;

int right = height(root.right);

if(right == -1) return -1;

return Math.abs(left - right) > 1 ? -1 : 1 + Math.max(left, right);

}

}

java 判断二叉树是否平衡_剑指Offer - 判断二叉树是否是平衡二叉树相关推荐

  1. java输出链表的值_[剑指offer] 从尾到头打印链表(三种方法) java

    一.每次把新遍历的链表值放到list索引为0的位置,实现逆序. public class Solution { public ArrayList printListFromTailToHead(Lis ...

  2. 《LeetCode力扣练习》剑指 Offer 27. 二叉树的镜像 Java

    <LeetCode力扣练习>剑指 Offer 27. 二叉树的镜像 Java 一.资源 题目: 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: 4 / 2 7 / \ / ...

  3. 【Java】 剑指offer(27) 二叉树的镜像

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 思路 画图可 ...

  4. leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列

    剑指 Offer 系列完结撒花!! 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写 ...

  5. 【LeetCode】剑指 Offer 34. 二叉树中和为某一值的路径

    [LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 文章目录 [LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 package offer;import ja ...

  6. 算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)

    文章目录 剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树: 样例 1: 限制: 分析 题解 rust go c++ java python 原题传送门:https://leetcode. ...

  7. 字符串全排列算法_C#版_剑指OFFER

    字符串全排列算法_C#版_剑指OFFER 题目描述 ​题目描述 输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组. 例如输入字符串ABC,则输出由字符A, ...

  8. 【LeetCode】剑指 Offer 27. 二叉树的镜像

    [LeetCode]剑指 Offer 27. 二叉树的镜像 文章目录 [LeetCode]剑指 Offer 27. 二叉树的镜像 一.递归法 二.辅助栈(或队列) 一.递归法 根据二叉树镜像的定义,考 ...

  9. JZ27 [剑指 Offer 27] 二叉树的镜像

    二叉树的镜像 Category Difficulty Likes Dislikes lcof Easy (79.61%) 311 - 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: ...

最新文章

  1. 社会丨中外大学校长:人工智能时代 未来高校教什么
  2. 关于滴滴智能调度的分析和思考
  3. 经常使用的android弹出对话框
  4. 【Leetcode】背包问题模板
  5. 《微软的梦工场》 笔记(1)
  6. 如何在windows上将本地项目上传到Github
  7. bimmercode刷隐藏教程_PS教程:快速提取人物像素,制作人物海报主体,简单易学...
  8. 在子类中调用父类的方法super
  9. 计算机仿真技术实际,计算机仿真技术详解.doc
  10. 游戏开发之extern “C“、内存申请及匿名函数(lambda)(C++基础)
  11. 算法:平衡二叉树110. Balanced Binary Tree
  12. 通俗易懂讲解什么是Java分布式
  13. SSM框架运行原理以及流程
  14. 深入机器学习系列之:快速迭代聚类
  15. php日期自动加一天,php 当前日期加一天和指定日期加一天
  16. Quara 上一些有趣的问答
  17. 显卡天梯图vs专业计算卡丽台T4,v100vs混合精度训练
  18. IMFI DAO World of Balatroon:土地出售即将到来!
  19. 用VS2010打开VS2013、VS2015、VS2017等高版本项目
  20. Camera ISO、快门、光圈、曝光

热门文章

  1. 从抖音关闭评论,看服务治理的重要性
  2. opencv 学习:reshape函数
  3. 告别CPU,加速100-1000倍!只用GPU就能完成物理模拟和强化学习训练
  4. fatal error C1075: “{”: 未找到匹配令牌
  5. mini-caffe
  6. peleenet v2不好
  7. TensorFlow如何充分使用所有CPU核数,提高TensorFlow的CPU使用率,以及Intel的MKL加速
  8. exception: access violation reading 0xFFFFFFFFFFFFFFFF
  9. 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配
  10. nginx配置laravel