1. 程式人生 > >劍指offer:二叉樹的深度(Python)

劍指offer:二叉樹的深度(Python)

題目描述

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

解題思路

兩種解法,一種是第一時間的思路,即獲得根節點到每個葉節點的深度,取其中最長的返回:

class Solution:
    def __init__(self):
        self.maxDeep = 0
        self.curDeep = 0

    def TreeDepth(self, pRoot):
        if not pRoot:
            return 0
        self.curDeep += 1
self.TreeDepth(pRoot.left) self.maxDeep = self.curDeep if self.curDeep > self.maxDeep else self.maxDeep self.TreeDepth(pRoot.right) self.maxDeep = self.curDeep if self.curDeep > self.maxDeep else self.maxDeep self.curDeep -= 1

這種方案可以解決問題,但是程式碼不好看,還定義了兩個公共變數。第二種解法是自底而上,每當從子節點回退到其父節點時,返回左右子節點中最深的分支值,沒有公共變數,程式碼短小精悍:

def TreeDeep(self, pRoot):
    if not pRoot:
        return 0
    left = self.TreeDeep(pRoot.left)+1
    right = self.TreeDeep(pRoot.right)+1
    return left if left>right else right

如果想進一步縮短程式碼高度,那就把left和right的表示式帶入第6行程式碼中。雖然程式碼高度進一步縮短,但是增加了程式碼寬度,且降低了程式碼的可讀性,《Clean Code》中所不建議的方式,所以就到此為止了~