题目
描述
输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
样例解释:
样例二叉树如图,为一颗平衡二叉树
注:我们约定空树是平衡二叉树。
数据范围:
n≤100,树上节点的val值满足 0≤n≤1000
要求:空间复杂度O(1),时间复杂度 O(n)
输入描述:
输入一棵二叉树的根节点
返回值描述:
输出一个布尔类型的值
思路
递归求二叉树深度的同时加入左子树和右子树之差不超过1的判断。
代码
python版本:
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param pRoot TreeNode类
# @return bool布尔型
#
class Solution:
isblance = True
def IsBalanced_Solution(self , pRoot: TreeNode) -> bool:
# write code here
self.TreeDeep(pRoot)
return self.isblance
def TreeDeep(self , pRoot: TreeNode):
if(pRoot==None):
return 0
l = self.TreeDeep(pRoot.left)
r = self.TreeDeep(pRoot.right)
if(abs(l-r)>1):
self.isblance = False
return max(l, r)+1
c++版本:
class Solution {
public:
bool isblance = true;
bool IsBalanced_Solution(TreeNode* pRoot) {
this->TreeDeep(pRoot);
return this->isblance;
}
// 求二叉树的深度,采用递归的方式
int TreeDeep(TreeNode* pRoot){
if(!pRoot){
return 0;
}
int l = TreeDeep(pRoot->left);
int r = TreeDeep(pRoot->right);
if(abs(l-r)>1){
this->isblance = false;
}
return max(l, r)+1;
}
};```