首先是遞歸的方法
如果只有根節(jié)點验残,那就返回1
如果有左子樹捞附,沒有右子樹,那么樹的深度就是左子樹的深度+1。同理只有右子樹的情況鸟召。
-
如果既有左子樹胆绊,又有右子樹,那么就是兩個子樹中較大的深度+1
def TreeDepth(self, pRoot): # write code here if not pRoot: return 0 left = self.TreeDepth(pRoot.left) right = self.TreeDepth(pRoot.right) return max(left,right) +1
34-平衡二叉樹
之所以把這道題放在這欧募,因為它用到了求樹的深度的方法压状,當然該方法效率較低,多次判斷樹的深度跟继,之后會有效率高的方法种冬。
主要步驟為:
- 從根節(jié)點開始,判斷它左子樹和右子樹的深度舔糖,判斷他們相差是否大于1娱两,是則返回False,否則繼續(xù)
- 遞歸根節(jié)點的左子樹金吗,和右子樹十兢,然后繼續(xù)判斷即可
# -*- 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 not pRoot:
return True
left = self.tree_d(pRoot.left)
right = self.tree_d(pRoot.right)
if abs(left-right)>1:
return False
return self.IsBalanced_Solution(pRoot.left)&self.IsBalanced_Solution(pRoot.right)
def tree_d(self,pRoot):
if not pRoot:
return 0
left = self.tree_d(pRoot.left)
right = self.tree_d(pRoot.right)
return max(left,right)+1