JZ79 判断是不是平衡二叉树(C++|后序遍历)

前言

描述

输入一棵节点数为 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版权协议,转载请附上原文出处链接和本声明。