【LeetCode】剑指 Offer 55 - II. 平衡二叉树

文章目录

  • 【LeetCode】剑指 Offer 55 - II. 平衡二叉树
  • 一、后序遍历 + 剪枝(从底至顶)


一、后序遍历 + 剪枝(从底至顶)

思路是对二叉树做后序遍历,从底至顶返回字数深度,若判定某子树不是平衡树则 “剪枝”,直接向上返回

算法流程:

reucr(root) 函数:

  • 返回值:

    • 当结点 root 左 / 右子树的深度差 ≤ 1:则返回当前子树的深度,即结点 root 的左 / 右子树的深度最大值 + 1
      (max(left, right) + 1)
    • 当结点 root 左 / 右子树的深度差 > 2:则返回 - 1,代表此子树不是平衡树
  • 终止条件:
    • 当 root 为空:说明越过叶结点,因此返回高度 0
    • 当左(右)子树深度为 -1:代表此树的左(右)子树不是平衡树,因此剪枝,直接返回 -1

isBalanced(root) 函数:

  • 返回值:若 recur(root) != -1,则说明此树平衡,返回 true,否则返回 false
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
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;}
}
  • 时间复杂度 O(n),n 为树的结点数,最差情况下,需要递归遍历树的所有结点
  • 空间复杂度 O(n),最差情况下(树退化为链表时),系统递归需要使用 O(n) 的栈空间

【LeetCode】剑指 Offer 55 - II. 平衡二叉树相关推荐

  1. LeetCode Algorithm 剑指 Offer 55 - II. 平衡二叉树

    55 - II. 平衡二叉树 Ideas 这题直接扣平衡二叉树的定义就可以了,需要写一个辅助函数用来计算二叉树的高度,然后计算根节点左右子树的高度差,满足深度相差不超过1,那么它就是一棵平衡二叉树. ...

  2. 【LeetCode笔记】剑指 Offer 55 - II. 平衡二叉树(递归、二叉树)

    文章目录 题目描述 思路 && 代码 二刷 一脸懵逼,居然没写这道题的题解.. 题目描述 思路 && 代码 思路:平衡二叉树判断公式 = 左子树满足 + 右子树满足 + ...

  3. 剑指 Offer 55 - 2 平衡二叉树

    输入一棵二叉树的根节点,判断该树是不是平衡二叉树.如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 示例 1: 给定二叉树 [3,9,20,null,null,15,7] ...

  4. Leetcode 剑指 Offer 58 - II. 左旋转字符串 (每日一题 20210830)

    字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结 ...

  5. Leetcode 剑指 Offer 57 - II. 和为s的连续正数序列 (每日一题 20210809)

    输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数).序列内的数字由小到大排列,不同序列按照首个数字从小到大排列.示例 1:输入:target = 9 输出: ...

  6. leetcode剑指 Offer 53 - II. 0~n-1中缺失的数字(二分查找)

    一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字. 示例 1: 输入: [0,1,3 ...

  7. Leetcode 剑指 Offer 58 - II. 左旋转字符串 LCOF - Python

    class Solution:def reverseLeftWords(self, s: str, n: int) -> str:m = len(s)temp = list(s)temp.ext ...

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

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

  9. 【LeetCode】剑指 Offer 32 - II. 从上到下打印二叉树 II

    [LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II 文章目录 [LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II 一.层序遍历 BFS 一. ...

最新文章

  1. Py中的heapq模块【转载】
  2. 用MySql的查询分析语法explain来优化查询和索引
  3. icf表格_ICF企业教练实践大奖案例——建立改变和拯救生命的教练文化
  4. h700通话糊 索尼wi_专业的事还是要交给专业的人,盘点索尼千元以下的好耳机...
  5. MySQL数据库常用命令汇总
  6. AQS及其组件的核心原理
  7. phantomjs php 登录,PHANTOMJS PHP:空响应对象
  8. 4、Spring Cloud-负载均衡 Ribbon
  9. DataSet.GetBookMark内存泄漏
  10. 奇安信代码安全实验室获授华为鲲鹏计算平台漏洞奖励计划合作伙伴
  11. 能够支持python开发的环境_Windows上使用virtualenv搭建Python+Flask开发环境
  12. ASM 管理 转自三思笔记
  13. linux wine qq 字体,在UOS系统中更改deepin-wineQQ使用的字体经验谈
  14. matlab实现S函数的五种方式
  15. 利用html+javascript开发桌面软件
  16. idea社区版已经足够强大了
  17. “Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000005C8ECFFA80 处。”
  18. 怎么对待脾气暴躁爱骂人的女人?
  19. mysql单元组多元组_CDA数据分析师-数据分析练习题2套
  20. 【日常问题】chrome开启无痕模式,屏蔽第三方cookie

热门文章

  1. mysql 命令 示例,mysql语句大全
  2. linux批量过去5小时前文件名,Linux批量修改文件名
  3. python生成器与迭代器的区别_python生成器和迭代器的区别
  4. mysql环境变量的配置
  5. Codeforces Round #417 (Div. 2)
  6. Android之RecyclerView实现时光轴
  7. webpack图片打包
  8. SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现
  9. thinkphp 相关
  10. 2015 湘潭大学程序设计比赛(Internet)--D题-最小的数