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
  • 相关阅读:
    oracle误删数据的解决方法
    log4j配置详解
    Sprint + mybatis 编写测试
    关于项目报错Dynamic Web Module 3.0 requires Java 1.6 or newer 的解决方法
    js通过注册表找到本地软件安装路径并且执行
    启动项目的时候报驱动错误: not support oracle driver 1.0
    shiro权限管理
    搭建SpringBoot+dubbo+zookeeper+maven框架(四)
    搭建SpringBoot+dubbo+zookeeper+maven框架(三)
    搭建SpringBoot+dubbo+zookeeper+maven框架(二)
  • 原文地址:https://www.cnblogs.com/orcsir/p/9017379.html
Copyright © 2011-2022 走看看