Balanced Binary Tree --Leetcode C++
2015-06-03 20:34
435 查看
递归
左子树是否为平衡二叉树
右子树是否为平衡二叉树
左右子树高度差是否大于1,大于1,返回false
否则判断左右子树
最简单的理解方法就是如下的思路:
在上面的方法中,每一个节点都会计算节点左子树和右子树的高度,存在大量的重复计算
所以,采用自底向上的方式
左子树是否为平衡二叉树
右子树是否为平衡二叉树
左右子树高度差是否大于1,大于1,返回false
否则判断左右子树
最简单的理解方法就是如下的思路:
class Solution { public: bool isBalanced(TreeNode* root) { if(root==NULL){ return true; } int ldepth=depth(root->left); int rdepth=depth(root->right); if(abs(ldepth-rdepth)>1)return false; else{ return isBalanced(root->left)&&isBalanced(root->right); } } int depth(TreeNode *root){ if(root==NULL){ return 0; } int lleft=depth(root->left); int trigth=depth(root->right); return lleft>trigth ? lleft+1:trigth+1; } };
在上面的方法中,每一个节点都会计算节点左子树和右子树的高度,存在大量的重复计算
所以,采用自底向上的方式
class Solution2 { public: bool isBalanced(TreeNode* root) { if(root==NULL){ return true; } int height=getheight(root); if(height==-1){ return false; } return true; } int getheight(TreeNode *root){ if(root==NULL){ return 0; } int lleft=getheight(root->left); int trigth=getheight(root->right); if(lleft==-1||trigth==-1){ return -1; } if(abs(lleft-trigth)>1){ return -1; } return lleft>trigth? lleft+1:trigth+1; } };
相关文章推荐
- C语言的代码内存布局详解
- c++中运算符重载
- 12个有趣的C语言面试题
- c++输入文件处理按行读取并且将实现对一行数据分别处理
- Convert Sorted List to Binary Search Tree ------C++ 递归创建平衡二叉查找树
- 黑马程序员——C语言基础——结构体以及结构体指针实战
- C++环形矩阵填充实现
- c++ 时间类型详解 time_t
- C/C++中extern关键字详解
- C语言指针的初始化和赋值
- 【Minimum Path Sum】cpp
- C语言中的union用法
- 12个有趣的C语言面试题
- C语言中的enum(枚举)用法
- poj1258_prime
- C++:模板
- C语言中对大文件操作遇到的问题
- 动作手游源码分析3 classes/layer/GameHeroLayer.cpp
- C++实现费马小定理素数测试
- 笔记---c++ primer——struct(一)