剑指offer第三十六题【平衡二叉树】c++实现
2015-12-17 16:43
330 查看
平衡二叉树
参与人数:1452时间限制:1秒空间限制:32768K
通过比例:32.06%
最佳记录:0 ms|8552K(来自 水星哥)
算法知识视频讲解
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
平衡二叉树的定义是 左右两子树的高度差不能搞超过1
所以这题就是比较左右子树的高度差,
和求整个树高类似,直接递归/*struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
int deepthTree(TreeNode * pRoot){
if(pRoot==NULL){
return 0;
}else{
int l=deepthTree(pRoot->left);
int r=deepthTree(pRoot->right);
if(abs(l-r)>=2){
return -1;
}
if(l==-1||r==-1){
return -1;
}
return max(l,r)+1;
}
}
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if(pRoot==NULL){
return true;
}
if(deepthTree(pRoot)!=-1){
return true;
}else{
return false;
}
}
};
参与人数:1452时间限制:1秒空间限制:32768K
通过比例:32.06%
最佳记录:0 ms|8552K(来自 水星哥)
算法知识视频讲解
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。平衡二叉树的定义是 左右两子树的高度差不能搞超过1
所以这题就是比较左右子树的高度差,
和求整个树高类似,直接递归/*struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
int deepthTree(TreeNode * pRoot){
if(pRoot==NULL){
return 0;
}else{
int l=deepthTree(pRoot->left);
int r=deepthTree(pRoot->right);
if(abs(l-r)>=2){
return -1;
}
if(l==-1||r==-1){
return -1;
}
return max(l,r)+1;
}
}
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if(pRoot==NULL){
return true;
}
if(deepthTree(pRoot)!=-1){
return true;
}else{
return false;
}
}
};
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法