【劍指offer】判斷二叉樹是否為平衡二叉樹
阿新 • • 發佈:2018-12-11
平衡二叉樹(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