【问题描述】[中等]

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7]3/ \9  20/  \15   7
返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]1/ \2   2/ \3   3/ \4   4
返回 false 。限制:1 <= 树的结点个数 <= 10000

【解答思路】

1. 后序遍历 + 剪枝 (从底至顶)


时间复杂度:O(N) 空间复杂度:O(N)

class Solution {public boolean isBalanced(TreeNode root) {return recur(root) != -1;}private int recur(TreeNode root) {if (root == null) return 0;int left = recur(root.left);if(left == -1) return -1;int right = recur(root.right);if(right == -1) return -1;return Math.abs(left - right) < 2 ? Math.max(left, right) + 1 : -1;}
}
2. 先序遍历 + 判断深度 (从顶至底)

时间复杂度:O(NlogN) 空间复杂度:O(N)

public boolean isBalanced(TreeNode root) {if(root == null) return true;int l = maxDepth(root.left);int r = maxDepth(root.right);if(Math.abs(r-l)>1){return false;}else{return isBalanced(root.left) && isBalanced(root.right);}}public int maxDepth(TreeNode root) {if(root == null) return 0;return Math.max(maxDepth(root.left),maxDepth(root.right))+1;}

【总结】

1.树的遍历方式总体分为两类:深度优先搜索(DFS)、广度优先搜索(BFS);

常见的 DFS : 先序遍历、中序遍历、后序遍历;
常见的 BFS : 层序遍历(即按层遍历)。

2.二叉树遍历
  • 前序遍历 先输出当前结点的数据,再依次遍历输出左结点和右结点
  • 中序遍历 先遍历输出左结点,再输出当前结点的数据,再遍历输出右结点
  • 后续遍历 先遍历输出左结点,再遍历输出右结点,最后输出当前结点的数据
3. 审题 任意节点 遍历所有情况 切忌想当然

转载链接:https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof/solution/mian-shi-ti-55-ii-ping-heng-er-cha-shu-cong-di-zhi/

[剑指offer]面试题第[55-2]题[Leetcode][第110题][JAVA][平衡二叉树][DFS][剪枝]相关推荐

  1. 剑指offer——面试题55:字符流中第一个不重复的字符

    剑指offer--面试题55:字符流中第一个不重复的字符 Solution1: 当年第一次做这个题的做法 对此题最大的感想是: 1)区分deque(双端队列)和queue(队列): 2)要熟悉queu ...

  2. 剑指offer——面试题32:从1到n整数中1出现的次数

    剑指offer--面试题32:从1到n整数中1出现的次数 Solution1: 最容易想到的方法: class Solution { public:int NumberOf1Between1AndN_ ...

  3. 【剑指Offer面试题】 九度OJ1510:替换空格

    c/c++ 中的字符串以"\0"作为结尾符.这样每一个字符串都有一个额外字符的开销. 以下代码将造成内存越界. char str[10]; strcpy(str, "01 ...

  4. 剑指offer 面试题三 找出数组中重复的数字

    1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...

  5. [剑指offer]面试题第[68-2]题[Leetcode][第236题][JAVA][二叉搜索树的最近公共祖先][递归]

    [问题描述][中等] 235/68-1 搜索二叉树 236/68-2 二叉树 [解答思路] 递归 时间复杂度:O(N) 空间复杂度:O(N) 情况 1. , 2. , 3. , 4. 的展开写法如下. ...

  6. [剑指offer]面试题第[57]题[Leetcode][第167题][JAVA][和为s的两个数字][两数之和][HashSet][二分][双指针]

    [剑指offer]面试题第[57]题[Leetcode][第167题][第1题] 有序无序之分 题目输出不同之分 以下解法按照[剑指offer]面试题第[57]题进行题解 [问题描述][简单] 输入一 ...

  7. 两个数组中对应的下标的值合成一个新的数组_剑指 offer 面试题精选图解 03 . 数组中重复的数字

    今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字. 题目链接:https://leetcode-cn.com/problems/shu-zu-zhon ...

  8. 剑指offer面试题[64]-数据流中的中位数

    题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. 分 ...

  9. 剑指offer面试题[30]-最小的k个数

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 分析思路:         这道题最简单的思路莫过于把输入的n个数排 ...

  10. (待补充)【n个骰子的点数】剑指offer——面试题43:n个骰子的点数

    剑指offer--面试题43:n个骰子的点数 [注意]此题再牛客网上没有OnlineJudge,在此补充解法. 题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值 ...

最新文章

  1. JPA_‘Basic‘ attribute type should not be a container怎么解决
  2. QT连接Postgresql数据库
  3. JEECG列表嵌套查询列表子查询+号功能
  4. 完全采用CSS的CROSS BROWSER TABBED PAGES
  5. VTK(二)---相机外参矩阵Tcw转VTK相机,构建VR虚拟相机
  6. 卸载mysql的步骤_卸载MySQL数据库的完整步骤(图)
  7. 线性同余算法 (LCG)
  8. esp8266 从硬件开发到app制作的简单示例
  9. svn clean up 特别慢
  10. KMP算法—终于全部弄懂了
  11. 不用写一行代码,就能用ivx制作一个“微信小程序“,超牛逼
  12. Commands that may modify the data set are disabled, because this instance is configured to report er
  13. 可信数智云,联通云的个性化标签
  14. Citrix云桌面最小环境搭建
  15. KingbaseES V8R6集群运维案例---数据块故障自动修复(auto_bmr)
  16. Clipper库中文文档详解
  17. 计时 Linux 程序运行,linux 下计时程序
  18. 交换机端口及常见的网络端口
  19. android开发:android获取IMEI、MSISDN、ICCID、IMSI
  20. dr.oracle黑钻面膜,Dr.magic 黑金备长炭控油净致面膜好不好用?

热门文章

  1. 387. First Unique Character in a String
  2. VS 2012 找回消失的“创建单元测试”
  3. 查看linux的用户
  4. 控制反转_Spring:IOC 控制反转
  5. Visual.Assist.X.V10.7.1940的汉化破解补丁
  6. MyEclipse2015双击不能打开文件
  7. elasticsearch集群搭建-windows
  8. Android 常用设计模式——观察者模式,单例模式,Builder模式,原型模式,命令模式
  9. SQLServer全文检索无内容
  10. oracle数据泵导入分区表,数据泵导入分区表统计信息报错(七)