LeetCode 110-平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

解题思路:
  1. 构建递归函数,对于当前遍历到的节点,先递归地判断当前节点的左右子树是否是平衡二叉树,再判断以当前节点为根的子树是否平衡。
  2. 如果一棵子树是平衡的,则返回其高度,否则返回 -1。
  3. 如果存在一棵子树不平衡,则整个二叉树一定不平衡。
public boolean isBalanced(TreeNode root) {
        return process(root) != -1;
    }
    // 1. 构建递归函数
    private int process(TreeNode node) {
    	// 2. 如果节点为空,是平衡二叉树,高度为0
        if (node == null) return 0;
        // 3. 递归判断左子树是否是平衡二叉树,返回其高度
        int leftH = balanced(node.left);
        // 4. 递归判断右子树是否是平衡二叉树,返回其高度
        int rightH = balanced(node.right);
        // 5. 如果左子树不平衡或者右子树不平衡或者高度差超过1,直接返回-1
        if(leftH == - 1 || rightH == -1 || Math.abs(leftH - rightH) > 1) return -1;
        // 6. 返回树的高度(左右子树的最大高度 + 1)
        return Math.max(leftH, rightH) + 1;
    }

时间复杂度:O(n),其中 n 是二叉树中的节点个数。每个节点的计算高度和判断是否平衡都只需要处理一次,最坏情况下需要遍历二叉树中的所有节点

空间复杂度:O(n),其中 n 是二叉树中的节点个数。空间复杂度主要取决于递归调用的层数,递归调用的层数不会超过 n

如果对您有所帮助的话,请点个赞再退出吧!!!

题目链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值