剑指offer 平衡二叉树
题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。
分析:首先理解什么是平衡二叉树。平衡二叉树具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过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 平衡二叉树相关推荐
- 剑指Offer——平衡二叉树
题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 分析: 平衡二叉树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质 ...
- 【LeetCode】剑指 Offer 55 - II. 平衡二叉树
[LeetCode]剑指 Offer 55 - II. 平衡二叉树 文章目录 [LeetCode]剑指 Offer 55 - II. 平衡二叉树 一.后序遍历 + 剪枝(从底至顶) 一.后序遍历 + ...
- 剑指offer——面试题39-2:平衡二叉树
剑指offer--面试题39-2:平衡二叉树 20180906整理 Solution1: 书上的思路,利用后序遍历,每个结点只遍历一次~ class Solution { public:bool Is ...
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
- 剑指offer第二版答案详细版(带详细解题思路)
1.滑动窗口的最大值(剑指offer原59题) 解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素:首先将超出窗口中的队头元素先删掉,然后将新的元素插入当前窗口中,插入时要判断新插入 ...
- 二叉树代码 java面试题_《剑指offer》面试题39 二叉树的深度(java)
摘要: 今天翻到了<剑指offer>面试题39,题目二中的解法二是在函数的参数列表中通过指针的方式进行传值,而java是没有指针的,所以函数要进行改造.然而我翻了下别人的java版本(我就 ...
- 【剑指Offer】俯视50题之31 - 40题
[剑指Offer]俯视50题之31 - 40题 面试题31连续子数组的最大和 面试题32从1到n整数中1出现的次数 面试题33把数组排成最小的数 面试题34丑数 面试题35第一个仅仅出现一次的字符 面 ...
- 剑指offer(34-40题)详解
文章目录 34 第一个只出现一次的字符 35 数组中的逆序数 36 两个链表的第一个公共节点 37 数字在排序数组中出现的次数 38 二叉树的深度 39 平衡二叉树 40 数组中只出现一次的数字 欢迎 ...
- 剑指offer之题解目录(全)
剑指offer之题解目录(全) 3. 从尾到头打印链表 4. 重建二叉树 5. 用两个栈实现队列 6. 旋转数组的最小数字 7. 斐波那契数列 8. 跳台阶 9. 变态跳台阶 10. 矩阵覆盖 11. ...
最新文章
- 以太坊经典成为第六个加密货币
- webflux系列--reactor源码(二)
- python基础(part3)--运算符
- tcp 三次握手,四次挥手
- python如何快速导入未安装模块_如何导入安装在sitepackages中的模块
- AR VR或将彻底变革广告营销行业
- jquery获取元素的索引_如何在jQuery中获取具有特定索引的元素
- Oracle11g最佳培训高清下载版(王二暖Oracle11g教室\10年经验毫无保留)
- Javascript特效:电商商品展示放大镜
- [Angular 2] Transclusion in Angular 2
- IoT -- 物联网平台架构设计分析
- GeoServer中利用SLD配图之矢量图层配图
- Moive-Pages
- java根据经纬度获取详细地址
- 【 MySQL1064错误代码】
- 在C++与python间传视频帧
- NVIDIA视频编码器 ffmpeg -h encoder=h264_nvenc
- 两个二层交换机,两个PC配置固定地址,查看MAC地址实验
- 短域名生成java_腾讯短链接url生成接口/腾讯短网址在线生成/新浪微博短链接生成器的分享...
- Git连接GitHub仓库,同步上传图片及CSDN外链图片转存失败解决方案
热门文章
- 洛谷2766:[网络流24题]最长不下降子序列问题——题解
- switch case 中定义变量
- [转]ExecuteNonQuery()、ExecuteReader()、ExecuteScalar()的简单说明
- vue-cli安装、node-sass安装、mintUI组件库安装
- Python之sort()函数详解
- Win32基础知识5 - Win32汇编语言006
- oracle expdp 多线程,Oracle expdp 过滤和并行
- 【LDA学习系列】Dirichlet分布python代码
- (转载)c++内存池实现 .
- 通用算法-sql相似度模糊匹配