2015-05-11 138 views
3

我試圖找到一個二叉搜索樹的最大值。示例解決方案如下,但我試圖瞭解我的解決方案是否有問題?我的樣品溶液的問題是,它似乎檢查每個節點是否爲無兩次:一次在「如果沒有current.right」和第二的「而當前...電流= current.right」,這似乎是多餘的。二叉搜索樹最大值

樣品溶液:

 def find_largest(root_node): 
     current = root_node 
     while current: 
      if not current.right: 
       return current.value 
      current = current.right 

我的解決辦法:

 def find_largest(root_node): 
     current = root_node 
     if current: 
      while current.right is not None: 
       current = current.right 
      return current.value 

問題/代碼來源:Interviewcake.com

回答

2

你的分析是正確的,將樣品溶液檢查None兩次,每次節點和您的解決方案只檢查一次,否則它們是等效的。我也會說你的解決方案更具可讀性,但這有點主觀。

作爲一種增強,您可以通過調用函數current而不是root_node的參數來擺脫函數體中的第一行。它爲您提供了一個額外的好處就像現在的參數名稱並不表明你的函數只能用節點作爲參數來調用。事實上,它正確地找到了任何子樹中的最大值。

+0

是否有他,如果目前的:?理由該示例沒有檢查。是的,他鞏固了這個時間,如果沒有的話。所以...使用更多內存的更快的方式可能是分配最後一個值,並且只是在current.right last = current.right時返回last。咦? – joshstrike

+0

@joshstrike當然有一個原因。如果'root_node'是'None'(即我們被賦予一棵空樹)會發生什麼? – kirelagin

+1

@joshstrike標籤或調用名稱並不好。 –