leetcode-110:平衡二叉树

简介: leetcode-110:平衡二叉树

题目

题目链接

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:true

示例 2:

输入:root = [1,2,2,3,3,null,null,4,4]
输出:false

示例 3:

输入:root = []
输出:true

提示:

  • 树中的节点数在范围 [0, 5000] 内
  • − 1 0 4 -10^4104 <= Node.val <= 1 0 4 10^4104

解答

方法一:递归

如果左子树或者右子树的高度返回为-1(不是平衡二叉树),那么该树一定不是平衡二叉树,同样返回-1

python解法

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isBalanced(self, root: TreeNode) -> bool:
        return self.get_depth(root)!=-1
    def get_depth(self,root):
        if not root: 
            return 0
        left_depth = self.get_depth(root.left)
        right_depth = self.get_depth(root.right)
        if left_depth==-1 or right_depth==-1 or abs(left_depth-right_depth)>1:
            return -1
        else:
            return 1+max(left_depth,right_depth)

c++解法

class Solution {
public:
    int  getDepth(TreeNode* root){
        if(!root) return 0;
        int left_depth=getDepth(root->left);
        int right_depth=getDepth(root->right);
        if(left_depth==-1||right_depth==-1||abs(left_depth-right_depth)>1){
            return -1;
        }
        return 1+max(left_depth,right_depth);
    }
    bool isBalanced(TreeNode* root) {
        return getDepth(root)!=-1;
    }
};

java解法

class Solution {
    int getDepth(TreeNode root){
        if(root==null) return 0;
        int left=getDepth(root.left);
        int right=getDepth(root.right);
        if(left==-1||right==-1||Math.abs(left-right)>1){
            return -1;
        }
        return Math.max(left,right)+1;
    }
    public boolean isBalanced(TreeNode root) {
        return getDepth(root)!=-1;
    }
}


相关文章
|
1月前
【LeetCode 33】110.平衡二叉树
【LeetCode 33】110.平衡二叉树
10 1
|
6月前
leetcode代码记录(平衡二叉树
leetcode代码记录(平衡二叉树
35 0
|
3月前
|
算法 Java 关系型数据库
leetcode110-平衡二叉树
文章通过LeetCode第110题"平衡二叉树"的解题过程,深入讲解了平衡二叉树的定义、树的高度概念,并提供了使用后序遍历算法判断二叉树是否平衡的Java代码实现,强调了理解理论知识和实践编码的重要性。
|
3月前
|
Python
【Leetcode刷题Python】110. 平衡二叉树
LeetCode第110题"平衡二叉树"的Python解决方案,通过计算二叉树的高度并判断任意两个子树的高度差是否不超过1来确定树是否平衡。
20 2
|
5月前
|
SQL 算法 数据挖掘
力扣110:平衡二叉树
力扣110:平衡二叉树
|
算法
【LeetCode题目详解】(五)144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历、104.二叉树的最大深度、110.平衡二叉树
【LeetCode题目详解】(五)144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历、104.二叉树的最大深度、110.平衡二叉树
53 0
LeetCode | 110. 平衡二叉树
LeetCode | 110. 平衡二叉树
LeetCode刷题Day14——二叉树(完全二叉树、平衡二叉树、二叉树路径、左叶子之和)
一、完全二叉树的节点个数 题目链接:222. 完全二叉树的节点个数
|
算法
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
42 0
【Leetcode -110.平衡二叉树 -226.翻转二叉树】
【Leetcode -110.平衡二叉树 -226.翻转二叉树】
31 0