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

2021-08-28 09:35:01 字數 913 閱讀 2481

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