zoukankan      html  css  js  c++  java
  • Python编程之数据结构与算法练习_008

    练习内容:

    使用递归方式判断一颗二叉树是否为平衡二叉树。

    正文内容提要:

    1.创建类表示二叉树结构。
    2.创建类保存每次递归返回的数据。
    3.使用递归方式判断一颗二叉树是否为平衡二叉树。
    4.简单测试,验证正确性。

    1.创建类表示二叉树结构。

    代码如下:

    class Node:
        def __init__(self, data):
            self.__data = data
            self.__left = None
            self.__right = None
    
        @property
        def left(self):
            return self.__left
    
        @left.setter
        def left(self, node):
            self.__left = node
    
        @property
        def right(self):
            return self.__right
    
        @right.setter
        def right(self, node):
            self.__right = node

    2.创建类保存每次递归返回的数据。

    代码如下:

    class ReturnData:
        def __init__(self, isbalanced, height):
            self.__isbalanced = isbalanced
            self.__height = height
    
        @property
        def isbalanced(self):
            return self.__isbalanced
    
        @isbalanced.setter
        def isbalanced(self, isbalanced):
            self.__isbalanced = isbalanced
    
        @property
        def height(self):
            return self.__height
    
        @height.setter
        def height(self, height):
            self.__height = height

    3.使用递归方式判断一颗二叉树是否为平衡二叉树。

    代码如下:

    def is_balanced_tree(head):
        def process(head):
            if not head:
                return ReturnData(True, 0)
    
            left_result = process(head.left)
            right_result = process(head.right)
    
            if not left_result.isbalanced or not right_result.isbalanced:
                return ReturnData(False, max(left_result.height, right_result.height) + 1)
    
            if abs(left_result.height - right_result.height) > 1:
                return ReturnData(False, max(left_result.height, right_result.height) + 1)
            else:
                return ReturnData(True, max(left_result.height, right_result.height) + 1)
    
        return process(head).isbalanced

    4.简单测试,验证正确性。

    代码如下:

    if __name__ == "__main__":
        # Balanced Tree
        head1 = Node(1)
        head1.left = Node(2)
        head1.right = Node(3)
        head1.left.left = Node(4)
        head1.left.right = Node(5)
    
        print(is_balanced_tree(head1)) # True
    
        # Not Balanced Tree
        head2 = Node(1)
        head2.left = Node(2)
        head2.left.left = Node(4)
        head2.left.right = Node(5)
    
        print(is_balanced_tree(head2)) #False
  • 相关阅读:
    【驾考】科目三上路笔记——3号线
    【操作系统】30天自制操作系统——第5天
    【驾考】科目三笔记
    【操作系统】30天自制操作系统——第4天
    【操作系统】 DOS命令windows批处理batch编程——第一章
    【操作系统】30天自制操作系统——第3天
    【操作系统】30天自制操作系统——第2天
    【操作系统】30天自制操作系统——第1天
    【机器学习】Pandas库练习-获取yahoo金融苹果公司的股票数据
    SOS团队介绍
  • 原文地址:https://www.cnblogs.com/orcsir/p/9017379.html
Copyright © 2011-2022 走看看