劍指offer——python【第38題】二叉樹的深度


題目描述

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

解題思路

想了很久。。首先本渣渣就不太理解遞歸在python中的實現,其次又不知道怎么去找到最長路徑,真是很費腦子,開始正題吧

首先明確二叉樹每個節點都可以看作“根節點”,依次延伸下去(二叉樹的遞歸定義),對於根節點,我要求這個節點的最大深度,那么只要求兩棵左右子樹的最大深度,並且max一下,然后+1就行了;然后對於左右兩棵子樹,也只要求它們的兩棵左右子樹的最大深度,然后max一下並且+1就行了。。。。。到了葉子節點,它沒有左右兩棵子樹了,那么它的最大深度就直接賦值為1,然后一層一層往上去實現(剛才是往下展開),就可以求出根節點到最底層葉子節點的最大深度,簡直是很牛逼的思路!

給出代碼具體分析:

class Solution:
    def TreeDepth(self, pRoot):
        # write code here
        if pRoot == None:
            return 0
        lDepth = self.TreeDepth(pRoot.left)
        rDepth = self.TreeDepth(pRoot.right)
        return max(lDepth,rDepth)+1

假設有如下二叉樹,

代碼執行情況如下:

首先十分明確的一點是,TreeDepth(60)的結果就是返回值,就是要求出來的,不要被遞歸函數的壓棧、出棧給混淆了,return的一定是TreeDepth(根節點)的返回值

TreeDepth(60)= max(TreeDepth(12),TreeDepth(90))+1,OK,求那兩個未知的值

TreeDepth(12)是1,因為它的左右節點都不存在,兩個返回值都是0,所以max()+1之后就是1,

而TreeDepth(90)這個東西,也要一層層遞歸下去求解,容易看出來,這個值是3

最后,max(TreeDepth(12),TreeDepth(90))+1求出來就是4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM