劍指向Offer-Python版 -- 二叉樹的深度

題目描述

輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度爲樹的深度。

# -*- 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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章