題目描述
輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度爲樹的深度。
# -*- 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
二叉樹:常用操作爲遞歸
假設此題二叉樹如下:
代碼如下:
# -*- 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 not pRoot:
return 0
left = self.TreeDepth(pRoot.left) + 1
right = self.TreeDepth(pRoot.right) + 1
return max(left, right)
過程解析
左子樹
運行開始:
left = self.TreeDepth(pRoot.left) + 1
遞歸到left = self.TreeDepth(4) + 1
繼續遞歸:left = TreeDepth(null) +1 , right= TreeDepth(null) +1
TreeDepth(null) 滿足條件: if not pRoot : return 0
所以self.TreeDepth(4) 下 : left = 0 + 1 ,right = 0 + 1
return max(left ,right) —>self.TreeDepth(4) = 1
self.TreeDepth(2) 下:
left = self.TreeDepth(4) + 1 —> left = 1 + 1
right = self.TreeDepth(Null) + 1 --> right = 0 + 1
return max(left ,right) —>self.TreeDepth(2) = 2
右子樹
left = self.TreeDepth(pRoot.left) + 1
遞歸到left = self.TreeDepth(7) + 1
繼續遞歸:left = TreeDepth(null) +1 , right= TreeDepth(null) +1
TreeDepth(null) 滿足條件: if not pRoot : return 0
所以self.TreeDepth(4) 下 : left = 0 + 1 ,right = 0 + 1
return max(left ,right) —>self.TreeDepth(7) = 1
self.TreeDepth(5) 下:
left = self.TreeDepth(7) + 1 —> left = 1 + 1
right = self.TreeDepth(Null) + 1 --> right = 0 + 1
return max(left ,right) —>self.TreeDepth(5) = 2
self.TreeDepth(3) 下:
left = self.TreeDepth(5) + 1 —> left = 2 + 1 = 3
right = self.TreeDepth(6) + 1 —> 同理可知self.TreeDepth(6) = 1
—> right = 2
即self.TreeDepth(3) = max(left , right) ---> 3
最後:
class Solution:
def TreeDepth(self, Node(1)):
# write code here
if not pRoot:
return 0
self.TreeDepth(Node(2)) = 2
self.TreeDepth(Node(3)) = 3
left = self.TreeDepth(Node(2)) + 1
right = self.TreeDepth(Node(3)) + 1
return max(left, right)