平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
第一种递归思路,根据定义来,递归返回(r-l)<1 and balancetree(r) and balancetree(l)
但是这个自顶向下的递归下层结点会进行多次访问,相当于访问次数为1+2+。。。+n,时间复杂度为O(n^2)
第二种递归思路,自底向上递归,如果子树已经不平衡,返回-1,层层返回,就直接否定整棵树,时间复杂度为O(n)
运行时间:29ms
占用内存:5856k
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def IsBalanced_Solution(self, pRoot):
# write code here
def maxdepth(root):
if not root:
return 0
l = maxdepth(root.left)
if l==-1:
return -1
r = maxdepth(root.right)
if r==-1:
return -1
if abs(r-l)<=1:
return 1+max(l,r)
else:
return -1
return maxdepth(pRoot)!=-1