Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python算法——树的平衡检测

Python算法——树的平衡检测

作者头像
Echo_Wish
发布于 2023-11-30 11:44:02
发布于 2023-11-30 11:44:02
16100
代码可运行
举报
运行总次数:0
代码可运行

Python中的树的平衡检测

树的平衡检测是指判断一棵树是否为平衡二叉树,即每个节点的左右子树高度差不超过1。在本文中,我们将深入讨论如何实现树的平衡检测算法,提供Python代码实现,并详细说明算法的原理和步骤。

平衡检测算法

树的平衡检测可以通过递归遍历树的每个节点,计算其左右子树的高度差,然后判断是否满足平衡条件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class TreeNode:
    def __init__(self, value):
        self.val = value
        self.left = None
        self.right = None

def is_balanced(root):
    def height(node):
        if not node:
            return 0
        left_height = height(node.left)
        right_height = height(node.right)
        return 1 + max(left_height, right_height)

    if not root:
        return True

    left_height = height(root.left)
    right_height = height(root.right)

    if abs(left_height - right_height) <= 1:
        return is_balanced(root.left) and is_balanced(root.right)
    else:
        return False
示例

考虑以下两棵二叉树:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 平衡二叉树
"""
        1
       / \
      2   3
     / \
    4   5
"""
balanced_tree = TreeNode(1)
balanced_tree.left = TreeNode(2)
balanced_tree.right = TreeNode(3)
balanced_tree.left.left = TreeNode(4)
balanced_tree.left.right = TreeNode(5)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 非平衡二叉树
"""
        1
       / \
      2   3
         / \
        4   5
       /
      6
"""
unbalanced_tree = TreeNode(1)
unbalanced_tree.left = TreeNode(2)
unbalanced_tree.right = TreeNode(3)
unbalanced_tree.right.left = TreeNode(4)
unbalanced_tree.right.right = TreeNode(5)
unbalanced_tree.right.left.left = TreeNode(6)
检测平衡二叉树
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
result_balanced = is_balanced(balanced_tree)
print("是否为平衡二叉树:", result_balanced)

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
是否为平衡二叉树: True
检测非平衡二叉树
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
result_unbalanced = is_balanced(unbalanced_tree)
print("是否为平衡二叉树:", result_unbalanced)

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
是否为平衡二叉树: False

这表示通过平衡检测算法,我们能够判断一棵树是否为平衡二叉树。平衡二叉树的特点是每个节点的左右子树高度差不超过1,这有助于保持树的整体平衡性,提高树的搜索效率。通过理解算法的原理和实现,您将能够更好地处理树结构问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
leetcode 110-判断一棵树是否为平衡二叉树 #算法#
Given a binary tree, determine if it is height-balanced. 给出一棵二叉树,判断它是否高度平衡。 For this problem, a height-balanced binary tree is defined as: 高度平衡二叉树定义为:
梦飞
2022/06/23
2000
【小Y学算法】⚡️每日LeetCode打卡⚡️——30.平衡二叉树
这道题中的平衡二叉树的定义是:二叉树的每个节点的左右子树的高度差的绝对值不超过 11,则二叉树是平衡二叉树。
呆呆敲代码的小Y
2021/09/14
2940
【小Y学算法】⚡️每日LeetCode打卡⚡️——30.平衡二叉树
LeetCode-面试题55-2-平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
benym
2022/07/14
1890
二叉树精选面试题
判断结构相同:也就是在遍历的过程中,如果有一个节点为null,另一棵树的节点不为null,那么结构就不相同
2的n次方
2024/10/15
490
二叉树精选面试题
剑指 offer代码解析——面试题39判断平衡二叉树
题目:输入一颗二叉树的根结点,判断该树是不是平衡二叉树。 如果某二叉树中任意结点的左右子树的高度相差不超过1,那么它就是一棵平衡二叉树。 分析:所谓平衡二叉树就是要确保每个结点的左子树与右子树的高度差在-1到1之间。 由于之前一题已经给出了二叉树高度的计算方法,因此本题最直观的思路就是分别计算每个结点的左子树高和右子树高,从而判断一棵树的所有结点是否均为平衡二叉树。 /** * 题目:输入一颗二叉树的根结点,判断该树是不是平衡二叉树。 * 如果某二叉树中任意结点的左右子树的高度相差不超过1,那么
大闲人柴毛毛
2018/03/09
4960
​LeetCode刷题实战110:平衡二叉树
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
2760
​LeetCode刷题实战110:平衡二叉树
leetcode树之平衡二叉树
这里采用递归的解法,当root为null的时候返回0,之后递归计算root.left的高度lh,及root.right的高度rh,然后判断左右子树的高度差是否小于等于1,是的话返回该节点的高度,否则返回-1
code4it
2020/09/19
4060
leetcode树之平衡二叉树
平衡二叉树判断_39
输入一棵二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
名字是乱打的
2021/12/23
2420
Tree - 110. Balanced Binary Tree
Given a binary tree, determine if it is height-balanced.
ppxai
2020/09/23
3800
平衡二叉树
完整高频题库仓库地址:https://github.com/hzfe/awesome-interview
HZFEStudio
2021/09/18
3930
golang刷leetcode 技巧(21)平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
golangLeetcode
2022/08/02
1980
一天一大 lee(平衡二叉树)难度:简单-Day20200817
题目:: https://leetcode-cn.com/problems/balanced-binary-tree/
前端小书童
2020/09/24
3250
一天一大 lee(平衡二叉树)难度:简单-Day20200817
LeetCode 110. 平衡二叉树(二叉树高度)
1. 题目 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true 。 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 /
Michael阿明
2021/02/19
4880
平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
WindRunnerMax
2022/05/06
2370
剑指Offer-平衡二叉树
package Tree; /** * 平衡二叉树 * 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 * 平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质: * 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 */ public class Solution20 { public static void main(String[] args) { Solution20
武培轩
2018/04/18
7380
【LeetCode 110.平衡二叉树】两种递归实现:自顶向下、自底向上
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。
心谭博客
2020/04/21
8520
判断是不是平衡二叉树
输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
秦怀杂货店
2022/02/17
1.1K0
判断是不是平衡二叉树
剑指Offer(三十九)-- 平衡二叉树
输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
秦怀杂货店
2022/02/15
3190
剑指Offer(三十九)-- 平衡二叉树
【算法总结】五道常见的算法-二叉树
前段时间,写了面试必备的一系列文章,反应还不错。有一些读者反馈说,能不能整理一些面试常见的算法。前段时间,我恰好总结了 LeetCode 常见的面试算法题目。
程序员徐公
2022/01/20
1.1K0
【算法总结】五道常见的算法-二叉树
算法篇:树之树的高度
https://leetcode-cn.com/problems/balanced-binary-tree/
灰子学技术
2020/08/06
6970
算法篇:树之树的高度
相关推荐
leetcode 110-判断一棵树是否为平衡二叉树 #算法#
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验