【剑指offer】面试题39扩展:平衡二叉树
2024-10-11 10:14:20
题目:
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路:
直观的思路是,判断根结点的左子树、右子树高度差是否小于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;
}
};
最新文章
- Google分布式构建软件之四:分发构建结果
- PowerDesigner中表名过长,自动生成的主键名截取的问题
- mysql中文乱码问题解决
- input注意事项
- Java NIO教程 Buffer
- 如何防止鼠标移出移入子元素触发mouseout和mouseover事件
- Azure Mobile Services的REST API调用方式和自定义API
- SQLServer XML类型
- AMQP(Advanced Message Queuing Protocol)
- List<;KeyValuePair<;TKey,TValue>;>; 与 Dictionary<;TKey,TValue>; 不同
- 201521123030 《Java程序设计》 第12周学习总结
- Centos6.5-DHCPServer安装
- SpringBoot学习(八)-->;SpringBoot之过滤器、监听器
- redis设置防火墙的问题
- flask简单登录注册
- String 和StringBuffer的简单实用案例
- BZOJ 2561 最小生成树 | 网络流 最小割
- 七牛云 上传图片 https 修改Nginx 注意事项
- CentOS安装ANT
- LR函数基础(二)
热门文章
- 小结OC中Retain cycle(循环引用)
- 整型数组处理算法(八)插入(+、-、空格)完成的等式:1 2 3 4 5 6 7 8 9=N[华为面试题]
- 如何用Github的gh-pages分支展示自己的项目
- apache ab工具对网站进行压力测试
- 你的sscanf用对了吗
- VS2013服务器资源管理器添加Mysql数据源
- POI创建Excle
- 读书笔记_Effective_C++_条款二十一:当必须返回对象时,别妄想返回其reference
- 最近公共祖先:LCA及其用倍增实现 +POJ1986
- CF 277E Binary Tree on Plane (拆点 + 费用流) (KM也可做)