12.剑指offer-平衡二叉树的判定
来源:互联网 发布:mysql返回上一级 编辑:程序博客网 时间:2024/05/21 22:52
1.题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
1.1 什么叫做平衡二叉树
- 节点为空或者节点的左右子树的高度差小于1
2.基本思路
- 判断一个节点的左右子节点是不是平衡二叉树
- 一个节点的左右子节点的高度差是不是小于1
上面两个条件都得满足即:
- 在判断左右子节点是不是平衡二叉树的时候还要求其高度
3.代码
第二次实现
bool isBalanced(TreeNode *pRoot,int &d){ int dL,dR; bool res=true; dL=dR=0; if(pRoot){ res = isBalanced(pRoot->left,dL) && isBalanced(pRoot->right,dR) ; res = res && ( abs(dL-dR)<=1 ); d=max(dL,dR)+1; } return res; } bool IsBalanced_Solution(TreeNode* pRoot) { bool res=true; if(pRoot==NULL) return res; int d; res=isBalanced(pRoot,d); return res; }
第一次实现
int DeepthTree(TreeNode* pRoot){ int deep=0,deepR,deepL; if(pRoot){ deepL=DeepthTree(pRoot->left); deepR=DeepthTree(pRoot->right); deep=max(deepR,deepL)+1; } return deep; } bool IsBalanced(TreeNode* pRoot){ if(pRoot==NULL) return true; int deepL=0,deepR=0; deepL=DeepthTree(pRoot->left); deepR=DeepthTree(pRoot->right); if( abs(deepR-deepL )<=1 && IsBalanced(pRoot->left) && IsBalanced(pRoot->right)) return true; else return false; } bool IsBalanced_Solution(TreeNode* pRoot) { bool res=true; res=IsBalanced(pRoot); return res; }
- 第一次实现是将求节点高度和判断左右子节点是否平衡当作了两个过程。代码冗余度太高了。
0 0
- 12.剑指offer-平衡二叉树的判定
- 剑指offer:判定平衡二叉树
- 平衡二叉树的判定
- 码农小汪剑指Offer之37-平衡二叉树判定
- 平衡二叉树判定
- 平衡二叉树判定
- 平衡二叉树的判定(1077)
- LintCode93:平衡二叉树的判定
- 剑指offer--平衡二叉树
- 《剑指offer》平衡二叉树
- 剑指Offer--平衡二叉树
- 剑指offer-平衡二叉树
- 剑指offer:平衡二叉树
- 剑指offer 平衡二叉树
- 剑指offer:平衡二叉树
- [剑指offer]平衡二叉树
- 剑指offer|平衡二叉树
- 《剑指offer》-平衡二叉树
- 两行代码给你带来漂亮的侧滑栏
- 深拷贝与浅拷贝
- 静态成员函数与非静态成员函数的区别
- 循序渐进学HotFix (基于Gradle 1.5+版本)
- 剑指offer-面试题54-表示数值的字符串
- 12.剑指offer-平衡二叉树的判定
- Mybatis基础
- Uncaught TypeError: Cannot read property 'msie' of undefined
- HDU 5973-Game of Taking Stones(威佐夫博弈-JAVA BigDecimal)
- 常见总结
- python脚本处理代码注释规范化
- MeanShift聚类算法
- java常见问题
- Elasticsearch(四)-映射和分析