博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python编程之数据结构与算法练习_008
阅读量:5333 次
发布时间:2019-06-15

本文共 2067 字,大约阅读时间需要 6 分钟。

练习内容:

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

正文内容提要:

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

 

转载于:https://www.cnblogs.com/orcsir/p/9017379.html

你可能感兴趣的文章
python基本数据类型
查看>>
1305: [CQOI2009]dance跳舞 - BZOJ
查看>>
关于TDD的思考
查看>>
Cocos2d-x学习之windows 7 android环境搭建
查看>>
将html代码中的大写标签转换成小写标签
查看>>
jmeter多线程组间的参数传递
查看>>
零散笔记
查看>>
第1章2节《MonkeyRunner源码剖析》概述:边界(原创)
查看>>
ubuntu16下面 redis 无法链接到客户端问题
查看>>
android下实现4分屏播放4路高清h264格式的rtsp流
查看>>
[计算机网络] vsftpd的安装与使用
查看>>
【源代码】LinkedList源代码分析
查看>>
Cocostudio学习笔记(4) LoadingBar+ TextField
查看>>
cxf和jboss eap 6.2版本号冲突
查看>>
ORACLE触发器具体解释
查看>>
IOS开发之SVN的使用
查看>>
Python学习之元组
查看>>
第三次作业
查看>>
quartz多任务调度+spring 实现
查看>>
Codeforces 97.B Superset
查看>>