题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。

分析:首先理解什么是平衡二叉树。平衡二叉树具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

很明显可以用递归解决。

解法一:

 1 class Solution {
 2 public:
 3     int depth(TreeNode *pRoot) {
 4         if (pRoot == nullptr) {
 5             return 0;
 6         }
 7         int left = depth(pRoot->left);
 8         int right = depth(pRoot->right);
 9         return max(left, right) + 1;
10     }
11     bool IsBalanced_Solution(TreeNode* pRoot) {
12         if (pRoot == nullptr) {
13             return true;
14         }
15         int left = depth(pRoot->left);
16         int right = depth(pRoot->right);
17         return (abs(left - right) <= 1 && IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right));
18     }
19 };

上述解法的不足在于在计算上层节点的时候,他会反复计算下层节点的深度,增加了时间复杂度,于是有了后序遍历的解法,先判断两个子树是否为平衡二叉树,是的话返回深度,否则标记为1.

解法二:后序遍历

 1 class Solution {
 2 private:
 3     int getdepth(TreeNode *pRoot) {
 4         if (pRoot == NULL) {
 5             return 0;
 6         }
 7         int left = getdepth(pRoot->left);
 8         if (left == -1) {
 9             return -1;
10         }
11         int right = getdepth(pRoot->right);
12         if (right == -1) {
13             return -1;
14         }
15         return abs(left - right) > 1 ? -1 : 1 + max(left, right);
16     }
17 public:
18     bool IsBalanced_Solution(TreeNode* pRoot) {
19         return getdepth(pRoot) != -1;
20     }
21 };

转载于:https://www.cnblogs.com/qinduanyinghua/p/10474361.html

剑指offer 平衡二叉树相关推荐

  1. 剑指Offer——平衡二叉树

    题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 分析: 平衡二叉树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质 ...

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

    [LeetCode]剑指 Offer 55 - II. 平衡二叉树 文章目录 [LeetCode]剑指 Offer 55 - II. 平衡二叉树 一.后序遍历 + 剪枝(从底至顶) 一.后序遍历 + ...

  3. 剑指offer——面试题39-2:平衡二叉树

    剑指offer--面试题39-2:平衡二叉树 20180906整理 Solution1: 书上的思路,利用后序遍历,每个结点只遍历一次~ class Solution { public:bool Is ...

  4. C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解

    剑指offer 面试题39:判断平衡二叉树 提交网址:  http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...

  5. 剑指offer第二版答案详细版(带详细解题思路)

    1.滑动窗口的最大值(剑指offer原59题) 解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素:首先将超出窗口中的队头元素先删掉,然后将新的元素插入当前窗口中,插入时要判断新插入 ...

  6. 二叉树代码 java面试题_《剑指offer》面试题39 二叉树的深度(java)

    摘要: 今天翻到了<剑指offer>面试题39,题目二中的解法二是在函数的参数列表中通过指针的方式进行传值,而java是没有指针的,所以函数要进行改造.然而我翻了下别人的java版本(我就 ...

  7. 【剑指Offer】俯视50题之31 - 40题

    [剑指Offer]俯视50题之31 - 40题 面试题31连续子数组的最大和 面试题32从1到n整数中1出现的次数 面试题33把数组排成最小的数 面试题34丑数 面试题35第一个仅仅出现一次的字符 面 ...

  8. 剑指offer(34-40题)详解

    文章目录 34 第一个只出现一次的字符 35 数组中的逆序数 36 两个链表的第一个公共节点 37 数字在排序数组中出现的次数 38 二叉树的深度 39 平衡二叉树 40 数组中只出现一次的数字 欢迎 ...

  9. 剑指offer之题解目录(全)

    剑指offer之题解目录(全) 3. 从尾到头打印链表 4. 重建二叉树 5. 用两个栈实现队列 6. 旋转数组的最小数字 7. 斐波那契数列 8. 跳台阶 9. 变态跳台阶 10. 矩阵覆盖 11. ...

最新文章

  1. 以太坊经典成为第六个加密货币
  2. webflux系列--reactor源码(二)
  3. python基础(part3)--运算符
  4. tcp 三次握手,四次挥手
  5. python如何快速导入未安装模块_如何导入安装在sitepackages中的模块
  6. AR VR或将彻底变革广告营销行业
  7. jquery获取元素的索引_如何在jQuery中获取具有特定索引的元素
  8. Oracle11g最佳培训高清下载版(王二暖Oracle11g教室\10年经验毫无保留)
  9. Javascript特效:电商商品展示放大镜
  10. [Angular 2] Transclusion in Angular 2
  11. IoT -- 物联网平台架构设计分析
  12. GeoServer中利用SLD配图之矢量图层配图
  13. Moive-Pages
  14. java根据经纬度获取详细地址
  15. 【 MySQL1064错误代码】
  16. 在C++与python间传视频帧
  17. NVIDIA视频编码器 ffmpeg -h encoder=h264_nvenc
  18. 两个二层交换机,两个PC配置固定地址,查看MAC地址实验
  19. 短域名生成java_腾讯短链接url生成接口/腾讯短网址在线生成/新浪微博短链接生成器的分享...
  20. Git连接GitHub仓库,同步上传图片及CSDN外链图片转存失败解决方案

热门文章

  1. 洛谷2766:[网络流24题]最长不下降子序列问题——题解
  2. switch case 中定义变量
  3. [转]ExecuteNonQuery()、ExecuteReader()、ExecuteScalar()的简单说明
  4. vue-cli安装、node-sass安装、mintUI组件库安装
  5. Python之sort()函数详解
  6. Win32基础知识5 - Win32汇编语言006
  7. oracle expdp 多线程,Oracle expdp 过滤和并行
  8. 【LDA学习系列】Dirichlet分布python代码
  9. (转载)c++内存池实现 .
  10. 通用算法-sql相似度模糊匹配