面試55題:
題目:二叉樹的深度
題:輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。
解題思路:
①如果一棵樹只有一個節點,它的深度為1
②如果根節點只有左子樹而沒有右子樹,那么樹的深度是左子樹的深度加1
同樣,如果根節點只有右子樹而沒有左子樹,那么樹的深度是右子樹的深度加1
既有右子樹又有左子樹時,數的深度是左子樹和右子樹深度較大者加1
利用遞歸很容易實現上述思路:
解題代碼:
# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def TreeDepth(self, pRoot): # write code here if pRoot is None: return 0 left = self.TreeDepth(pRoot.left) right = self.TreeDepth(pRoot.right) return max(left,right)+1
題目拓展:平衡二叉樹
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。
解題代碼:
# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def TreeDepth(self, pRoot): if pRoot is None: return 0 left = self.TreeDepth(pRoot.left) right = self.TreeDepth(pRoot.right) return max(left,right)+1 def IsBalanced_Solution(self, pRoot): # write code here if pRoot is None: return True left = self.TreeDepth(pRoot.left) right = self.TreeDepth(pRoot.right) diff = left - right if diff< -1 or diff >1: return False return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)