1. 程式人生 > >【劍指offer】判斷二叉樹是否為平衡二叉樹

【劍指offer】判斷二叉樹是否為平衡二叉樹

平衡二叉樹(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