前言
描述
输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
样例解释:

样例二叉树如图,为一颗平衡二叉树
注:我们约定空树是平衡二叉树。
数据范围:n \le 100n≤100,树上节点的val值满足 0 \le n \le 10000≤n≤1000
要求:空间复杂度O(1),时间复杂度 O(n)
输入描述:
输入一棵二叉树的根节点
返回值描述:
输出一个布尔类型的值
果果念
因为面试遇到了很多次都是现场做二叉树的题目,自己有些生疏了,因此选择了几道题目再练习一下,球球给孩子一个大厂OFFER吧。
二叉树最核心的就是三种遍历方式了,PLR、LPR、LRP。关于这道题目,我们用后序遍历来实现,即先求解左右子树的深度,然后比较大小,如果左右子树的高度差大于1,修改全局flag变量,表示这个二叉树是不平衡的。那么一棵树的深度其实就是max(left,right)+1;
代码
class Solution {
public:
bool flag;
bool IsBalanced_Solution(TreeNode* pRoot) {
flag=true;
getDepth(pRoot);
return flag;
}
//获得树的深度,后序遍历LRP
int getDepth(TreeNode* pRoot){
if(pRoot==nullptr) return 0;
int left = getDepth(pRoot->left);
int right = getDepth(pRoot->right);
if(abs(left-right)>1){
flag=false;
}
return max(left,right)+1;
}
};版权声明:本文为weixin_43442778原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。