平衡二叉樹(balanced binary tree),具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。
第一種遞迴思路,根據定義來,遞迴返回(r-l)<1 and balancetree(r) and balancetree(l)
但是這個自頂向下的遞迴下層結點會進行多次訪問,相當於訪問次數為1+2+。。。+n,時間複雜度為o(n^2)
第二種遞迴思路,自底向上遞迴,如果子樹已經不平衡,返回-1,層層返回,就直接否定整棵樹,時間複雜度為o(n)
占用記憶體: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
劍指offer 39 判斷二叉樹是否為平衡二叉樹
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。思路 如果直接使用遞迴遍歷,會重複遍歷之前的節點,更好的方法是採用後序遍歷,對每個節點來說,我們都已經遍歷了它的左右子樹,所以邊遍歷邊判斷,最後遍歷到樹的根節點時,判斷完畢。遞迴遍歷 class solution 後序遍歷 class solution ...
《劍指offer》 判斷平衡二叉樹
題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。考察平衡樹的概念和遞迴的使用。平衡樹是指,樹中的每個節點的左右子樹的高度差小於等於1。class solution if isbalanced solution proot left isbalanced solution proot righ...
劍指offer 39 是否為平衡二叉樹
39.是否為平衡二叉樹 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹任意結點的左右子樹高度差不大於1就是平衡二叉樹。1 class solution 8 前序遞迴遍歷 9 int preorder treenode proot 17 return 0 18 19 20 leetcode執行時間為1m...