劍指Offer 39 平衡二叉樹

2021-10-07 19:02:43 字數 1024 閱讀 1526

輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。

遍歷樹的每個結點時候,調研函式treedepth得到它的左右子樹的深度。如果每個結點的左右子樹的深度相差不超過1,那就是平衡二叉樹

**簡潔,但是同乙個結點會被重複遍歷多次,時間效率不高。

需要尋找乙個不需要重複遍歷的演算法

用後序遍歷的方式二叉樹的每乙個結點,在遍歷到乙個結點之前就已經遍歷了它的左右子樹,只需要在遍歷每個結點的時候記錄它的深度,就可以一邊遍歷一邊判斷每個結點是不是平衡的

# -*- 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

if proot == none:

return true

if abs(self.treedepth(proot.left)-self.treedepth(proot.right))>1:

return false

return self.isbalanced_solution(proot.left) and self.isbalanced_solution(proot.right)

def treedepth(self,proot):

if proot == none:

return 0

left = self.treedepth(proot.left)

right = self.treedepth(proot.right)

return max(left+1,right+1)

劍指offer 39 平衡二叉樹

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。首先,什麼是平衡二叉樹?如果二叉樹中任意結點的左右子樹深度相差不超過1,那麼它就是平衡二叉樹。最直接的做法,遍歷每個結點,借助乙個獲取樹深度的遞迴函式,根據該結點的左右子樹高度差判斷是否平衡,然後遞迴地對左右子樹進行判斷。public class sol...

劍指offer39 平衡二叉樹

題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。首先要搞清楚什麼是平衡二叉樹 它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。很直觀用遞迴來解決 coding utf 8 class treenode def init self,x self.va...

劍指offer 39 平衡二叉樹

1.題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。2.解題思路 預備知識 平衡二叉樹是一 棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。思想 從根節點開始,先判斷左右子樹的高度差是否超過1,然後接著判斷左右子樹是否是平衡二叉樹。這邊用到了遞迴思想。如...