剑指offer-python刷题-平衡二叉树
发布日期:2021-07-28 12:03:13
浏览次数:3
分类:技术文章
本文共 1441 字,大约阅读时间需要 4 分钟。
题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树。平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
方法一:
直接写一个函数计算二叉树的深度,然后按照题目中平衡二叉树的定义去判断。
class Solution: def IsBalanced_Solution(self, pRoot): # write code here def tree_deepth(pRoot): if not pRoot: return 0 left = tree_deepth(pRoot.left) right = tree_deepth(pRoot.right) return max(left,right)+1 if not pRoot: return True diff = abs(tree_deepth(pRoot.left) - tree_deepth(pRoot.right)) if diff <= 1 and self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right): return True else: return False
方法二:
引入深度优先搜索(DFS)的思想,从如果一个某一个子树不是平衡二叉树,那么就不需要后续的判断了。因此对求解树的深度的函数进行改进。
class Solution: def IsBalanced_Solution(self, pRoot): # write code here def tree_deepth(pRoot): if not pRoot: return 0 #对左子树进行搜索,并在出现非平衡子树时返回-1并结束 left = tree_deepth(pRoot.left) if left == -1: return -1 #对右子树进行搜索,并在出现非平衡子树时返回-1并结束 right = tree_deepth(pRoot.right) if right == -1: return -1 #判断左右子树的深度之差是否满足要求 if abs(left - right) > 1: return -1 #正常情况下返回二叉树深度 return max(left,right)+1 return tree_deepth(pRoot) != -1
转载地址:https://blog.csdn.net/sinat_42437278/article/details/117714886 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月02日 18时05分48秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
centos vnc配置笔记
2019-04-27
让Squid 显示本地时间
2019-04-27
linux mysql 命令 大全
2019-04-27
清除Squid缓存的小工具
2019-04-27
Varnish Cache 3.0.0安装
2019-04-27
2011年6月编程语言关注度排行
2019-04-27
Varnish使用小结
2019-04-27
千万级并发HAproxy均衡负载系统介绍
2019-04-27
什么是A记录、MX记录、CNAME记录
2019-04-27
MongoDB简介
2019-04-27
Varnish purges 缓存清除
2019-04-27
Linux下redis安装部署
2019-04-27
水平切分与垂直切分
2019-04-27
MySQL引擎
2019-04-27
MySQL下的NoSQL解决方案HandlerSocket
2019-04-27
Apache服务器下使用 ab 命令进行压力测试
2019-04-27
查看Firefox中的缓存
2019-04-27
http header头设置反向代理不缓存
2019-04-27
配置MySQL主从复制
2019-04-27
CI框架如何删除地址栏的 index.php
2019-04-27