1. 程式人生 > >算法題 19 二叉平衡樹檢查 牛客網 CC150

算法題 19 二叉平衡樹檢查 牛客網 CC150

復雜 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 = None
class 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) and
self.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