劍指offer:二叉樹的深度(Python)
阿新 • • 發佈:2019-01-30
題目描述
輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。
解題思路
兩種解法,一種是第一時間的思路,即獲得根節點到每個葉節點的深度,取其中最長的返回:
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》中所不建議的方式,所以就到此為止了~