Leetcode 30 천도위, Week 2 Day 4, Diameter of Binary Tree, in Swift

4452 단어 Swiftleetcode
자료 상당히 합계 연산법: Tree Backtracking
갑자기 취시 수료
  • 도전 페이지 - h tps : // / ㅇ t 여기. 코 m / 에 xp ぉ 레 / 짱 게 / rd / 30-이다 y ぇ t 굿 g 짱 게 / 529 / 우에 k 2 / 3293 /
  • 제목 원 페이지 - 543. Diameter of Binary Tree

  • 사유



    주제요문적 시수노나카 모토개절 點之間 최장적 거리, 인자취 의미요한수적 고.所以要 go deep 所以就可以先想到 DFS (심도 우선 搜尋) 和 backtracking .

    Backtracking



    而對於 backtracking 的 subroutine ,我們必須定義結束遞迴呼叫的條件.

    정지 조건


  • 當傳入 root 零, 就回傳 0 不纼續執行

  • 주방 방식


  • 遞迴迴走訪左右節點、取得各自的樹高

  • 인상가능이상 좌우적 수고 做兩건 사정
  • 산출 구개절 點出發的直徑和目前做大直卑比較, 有大於的話則更新最大直徑.
  • 인위 我們唪關心 최대적 수고, 인此找出最大樹高並回傳

  • 최대 직교



    인위불능확정재수적 哪邊拿拿到最大值, 因此會需要在遞迴的過程之外有個變數來儲存這個值. 병재 주방 과정 중 부대적 柏查和更新她.

    정식 碼


    class Solution {
        func diameterOfBinaryTree(_ root: TreeNode?) -> Int {
            var result = 0
            height(root, &result)
            return result
        }
    
        @discardableResult
        func height(_ root: TreeNode?,_ result: inout Int) -> Int {
            if root == nil { return 0 }
    
            let left = height(root?.left, &result)
            let right = height(root?.right, &result)
    
            result = max(result, left + right)
            return max(left, right) + 1
        }
    }
    

    복도 분석



    령 n 為節點數
  • 시간 복도: O(n) . 인위 我們必須走過每個節點知道 소유적 가능성
  • 공간 복도: O(n) .寏一個 subroutine 都會宣告 left 和 right

    결과


    Runtime: 28 ms (93.83%)
    Memory Usage: 21.7 MB
    

    명란



    이수적 정의 來 간적 이야기, 제목 중환적 「심도」유 그 요함 「고」. 부과가 누마 아리야마 마인, 只是在命名 방법적 시후是有點想了一下到底当該用哪個名稱好 XDDD
  • 좋은 웹페이지 즐겨찾기