python--lintcode93. 平衡二叉树

标签: python leetcode 算法 lintcode
11人阅读 评论(0) 收藏 举报
分类:

给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 

样例

给出二叉树 A={3,9,20,#,#,15,7}, B={3,#,20,15,7}

A)  3            B)    3 
   / \                  \
  9  20                 20
    /  \                / \
   15   7              15  7

二叉树A是高度平衡的二叉树,但是B不是

这一题的解决方法依赖于上一题,上一题请看我上一篇博客:https://blog.csdn.net/wenqiwenqi123/article/details/79951291

依然采用分治法的思想,若一棵树的左右子树都是平衡二叉树,那么这棵树一定是平衡二叉树。

以及只要求出左右子树的深度就可以判断出这棵树是不是平衡二叉树了。

代码如下:

class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None


class Solution:
    """
       @param root: The root of binary tree.
       @return: True if this Binary tree is Balanced, or false.
       """
    def isBalanced(self, root):
        def find(root):   #求出树的深度
            if (root is None): return 0
            left = find(root.left)
            right = find(root.right)
            if (left > right):
                return left + 1
            else:
                return right + 1

        def decide(root):   #判断是否是平衡二叉树
            if(root is None):return True
            leftDepth=find(root.left)
            rightDepth=find(root.right)
            if(abs(leftDepth-rightDepth)>1):return False
            left=decide(root.left)
            right=decide(root.right)
            if(left==False or right==False):
                return False
            return True

        result=decide(root)
        return result



Tree = TreeNode(2)
Tree.left = TreeNode(1)
aa=Tree.right = TreeNode(3)
aa.right=TreeNode(4)
aa.right.right=TreeNode(5)
s = Solution()
print(s.isBalanced(Tree))


查看评论

面试题之平衡二叉树

由于二cyi 平衡二叉树简称平衡树,是由Adelson-Velskii和Landis于1962年首先提出的,所以又称为AVL树。他的定义很简单,就是若一棵二叉树的每个左右节点的高度差最多相差1,...
  • cao478208248
  • cao478208248
  • 2014-04-16 17:35:07
  • 1437

平衡二叉树的简单建立--示例

PG.lua文件 -- 这个用来输出处理 打logPG = {} function PG.Log(str) print(str); end 首先是pinghengtree.lua文件...
  • yangjie6898862
  • yangjie6898862
  • 2016-07-10 22:16:23
  • 425

平衡二叉树课程设计 课程设计

  • 2010年07月02日 10:25
  • 334KB
  • 下载

平衡二叉树实现的实例

之前谈过平衡二叉树的实现原理,详见http://blog.csdn.net/wxbmelisky/article/details/47755753,下述实例的实现过程依此为据。 现在通过实例来分析平...
  • wxbmelisky
  • wxbmelisky
  • 2015-08-19 21:11:59
  • 3275

平衡二叉树的实现代码

前面已经讲过平衡二叉树的实现原理以及实例 原理参见 http://blog.csdn.net/wxbmelisky/article/details/47755753      实例参见 http://...
  • wxbmelisky
  • wxbmelisky
  • 2015-08-21 20:53:00
  • 3338

算法导论 之 平衡二叉树 - 创建、插入、查询、销毁 - 递归[C语言]

平衡二叉树 C语言实现 创建 插入 查找 销毁
  • RoyalApex
  • RoyalApex
  • 2013-12-13 16:49:18
  • 4018

平衡二叉树的实现算法

平衡二叉树的实现算法 /* 首先平衡二叉树是一个二叉排序树; 其基本思想是: 在构建二叉排序树的过程中,当每插入一个节点时, 先检查是否因为插入而破坏了树的平衡性,若是, 找出最小不平衡树,进行适应...
  • u012736084
  • u012736084
  • 2014-02-08 13:39:33
  • 1532

平衡二叉树及调整

什么是平衡二叉树,如何调整不平衡?  看了很多人的博客,发现多多少少都有一些错误(被迷惑了很久),最多通过查看维基百科的定义才终于搞懂。 写篇文章记录一下,防止自己忘记。 1. 什么是平衡二叉树?...
  • ch717828
  • ch717828
  • 2015-07-16 11:13:19
  • 2505

poj 3481 Double Queue(平衡二叉树基础练习题)

题意: 。。。 思路: 这道题用来作SBT的练习了。。。// SBT节点,固定域 l, r, sz // 需要一个key来比较大小 struct node { int l, r, sz,...
  • slowlight93
  • slowlight93
  • 2015-04-19 00:15:49
  • 1004

平衡二叉树---》插入、删除

平衡二叉树(Balancedbinary tree)是由阿德尔森-维尔斯和兰迪斯(Adelson-Velskiiand Landis)于1962年首先提出的,所以又称为AVL树。 定义:平衡二叉树或...
  • linmars24
  • linmars24
  • 2012-07-24 21:30:01
  • 7435
    个人资料
    持之以恒
    等级:
    访问量: 5万+
    积分: 1490
    排名: 3万+
    最新评论