93.平衡二叉树
来源:互联网 发布:指南针炒股软件装不上 编辑:程序博客网 时间:2024/06/05 02:35
描述:
给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。
样例:
给出二叉树 A={3,9,20,#,#,15,7}
, B={3,#,20,15,7}
A) 3 B) 3 / \ \ 9 20 20 / \ / \ 15 7 15 7
二叉树A是高度平衡的二叉树,但是B不是。
标签:递归 分治法
思路:
参考97题求二叉树的深度,先求出根结点的左右子树的深度,然后判断它们的深度相差不超过1,如果否,则不是一棵二叉树;如果是,再用同样的方法分别判断左子树和右子树是否为平衡二叉树,如果都是,则这就是一棵平衡二叉树。
注意:在遍历结点的同时记录下该结点及其子树是否是平衡的,避免重复访问。
代码:/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
bool isbalanced;
bool isBalanced(TreeNode *root){
isbalanced=true;
getHeight(root);
return isbalanced;
}
int getHeight(TreeNode *node){
int lheight=0,rheight=0,height;
if(node!=NULL){
height=1;
lheight+=getHeight(node->left);
rheight+=getHeight(node->right);
if(lheight>=rheight){
height+=lheight;
if(lheight-rheight>1){
isbalanced=false;
}
}
else {
height+=rheight;
if(rheight-lheight>1){
isbalanced=false;
}
}
}
else {
height=0;
}
return height;
}
};
- 93.平衡二叉树
- LintCode | 93. 平衡二叉树
- LintCode | 93. 平衡二叉树
- LintCode 93.平衡二叉树
- 平衡二叉树平衡法则
- 二叉树--二叉平衡树
- 平衡二叉树的
- 平衡二叉树
- 平衡二叉树
- 平衡二叉树
- 平衡二叉树
- 平衡二叉查找树
- 平衡二叉树 详解
- 平衡二叉树
- 平衡二叉树
- AVL 平衡二叉树
- 平衡二叉树
- 平衡二叉树-红黑树
- C#数据类型
- python 装饰器详解
- 2017年9月9日普级组 买礼物的艰辛
- 低通滤波(一阶)
- 解决Android6.0 user adb没有授权Dialog弹出
- 93.平衡二叉树
- 浅谈Java中的equals和==
- MATLAB学习笔记六(关于图像处理)
- 一个技术开发者的应聘简历是怎样的?
- kaldi简单使用笔记***
- 最近学习的新的js数组去重方法
- 服务器java客户端C#的Socket通讯遇到的坑
- mui-switch 修改 on off 文本
- 微信公众平台之使用PPT制作图片