算法題 19 二叉平衡樹檢查 牛客網 CC150
阿新 • • 發佈:2018-07-20
復雜 tro 返回 false ron code return nlog getheight
算法題 19 二叉平衡樹檢查 牛客網 CC150
實現一個函數,檢查二叉樹是否平衡,平衡的定義如下,對於樹中的任意一個結點,其兩顆子樹的高度差不超過1。
給定指向樹根結點的指針TreeNode* root,請返回一個bool,代表這棵樹是否平衡。
解題代碼:時間復雜度為O(NlogN) N為樹中的節點數
# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Balance: def isBalance(self, root): # write code here if not root: return True heightDiff=self.getHeight(root.left)-self.getHeight(root.right) if abs(heightDiff)>1: return False else: return self.isBalance(root.left) andself.isBalance(root.right) def getHeight(self,root): if not root: return 0 return max(self.getHeight(root.left),self.getHeight(root.right))+1
解題代碼二:優化版,時間復雜度為O(N),空間復雜度為O(H),H為樹的高度
# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x# self.left = None # self.right = None class Balance: def isBalance(self, root): # write code here if self.checkHeight(root)==-1: return False else: return True def checkHeight(self,root): if not root: return 0 #高度為0 leftHeight=self.checkHeight(root.left) if leftHeight==-1: return -1 # 不平衡 rightHeight=self.checkHeight(root.right) if rightHeight==-1: return -1 # 不平衡 heightDiff=leftHeight-rightHeight if abs(heightDiff)>1: return -1 else: return max(leftHeight,rightHeight)+1
算法題 19 二叉平衡樹檢查 牛客網 CC150