题目:

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

思路:

直观的思路是,判断根结点的左子树、右子树高度差是否小于1。

为避免多次访问同一结点,应该用后序遍历的方式访问。

注意:加号优先级高于条件运算符

Code:

class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if(isBalanced(pRoot)<) return false;
else return true;
}
private:
int isBalanced(TreeNode* pRoot)
{
if(pRoot==NULL) return ; int left=,right=;
if(pRoot->left!=NULL)
left=isBalanced(pRoot->left);
if(left<) return left; if(pRoot->right!=NULL)
right=isBalanced(pRoot->right);
if(right<) return right; if(left-right<- || left-right>) return -;//不平衡 return (left>right?left:right)+;//平衡,则返回树的高度 注意:加号的优先级高于条件运算符!!!
}
};

书上形式的代码

class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
int depth=;
return IsBalanced(pRoot,&depth);
}
private:
bool IsBalanced(TreeNode* pRoot, int* depth)
{
if(pRoot==NULL)
{
*depth=;
return true;
} int left=,right=;
if(IsBalanced(pRoot->left,&left) && IsBalanced(pRoot->right,&right))
{
if(left-right<= && left-right>=-)
{
*depth=(left>right?left:right)+;
return true;
}
}
return false;
}
};

最新文章

  1. Google分布式构建软件之四:分发构建结果
  2. PowerDesigner中表名过长,自动生成的主键名截取的问题
  3. mysql中文乱码问题解决
  4. input注意事项
  5. Java NIO教程 Buffer
  6. 如何防止鼠标移出移入子元素触发mouseout和mouseover事件
  7. Azure Mobile Services的REST API调用方式和自定义API
  8. SQLServer XML类型
  9. AMQP(Advanced Message Queuing Protocol)
  10. List&lt;KeyValuePair&lt;TKey,TValue&gt;&gt; 与 Dictionary&lt;TKey,TValue&gt; 不同
  11. 201521123030 《Java程序设计》 第12周学习总结
  12. Centos6.5-DHCPServer安装
  13. SpringBoot学习(八)--&gt;SpringBoot之过滤器、监听器
  14. redis设置防火墙的问题
  15. flask简单登录注册
  16. String 和StringBuffer的简单实用案例
  17. BZOJ 2561 最小生成树 | 网络流 最小割
  18. 七牛云 上传图片 https 修改Nginx 注意事项
  19. CentOS安装ANT
  20. LR函数基础(二)

热门文章

  1. 小结OC中Retain cycle(循环引用)
  2. 整型数组处理算法(八)插入(+、-、空格)完成的等式:1 2 3 4 5 6 7 8 9=N[华为面试题]
  3. 如何用Github的gh-pages分支展示自己的项目
  4. apache ab工具对网站进行压力测试
  5. 你的sscanf用对了吗
  6. VS2013服务器资源管理器添加Mysql数据源
  7. POI创建Excle
  8. 读书笔记_Effective_C++_条款二十一:当必须返回对象时,别妄想返回其reference
  9. 最近公共祖先:LCA及其用倍增实现 +POJ1986
  10. CF 277E Binary Tree on Plane (拆点 + 费用流) (KM也可做)