[Golang]力扣Leetcode—初級演算法—樹—二叉樹的最大深度

土豆 發表於 2022-01-29
演算法 LeetCode Go

題目:給定一個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。

說明:葉子節點是指沒有子節點的節點。

連結力扣Leetcode—初級演算法—樹—二叉樹的最大深度.

示例

給定二叉樹 [3,9,20,null,null,15,7]
  
    3
   /  \
  9   20
     /  \
    15   7
  
返回它的最大深度 3 。

標籤:樹、深度優先搜尋、廣度優先搜尋、二叉樹

思路:找出樹中深度最大的子樹,把他看成一個新樹,再繼續從新樹中找出深度較大者。一直遞迴到臨界點,即當樹根為空時,說明樹不存在,深度為 0,遞迴結束,在其中每遞迴一次,深度就+1。

主要Go程式碼如下:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func maxDepth(root *TreeNode) int {
    i := 0
    j := 0
    if root == nil {
        return 0
    }
    i = maxDepth(root.Left) + 1
    j = maxDepth(root.Right) + 1
    if i < j {
        i, j = j, i
    }
    return i
}

提交截圖
在這裡插入圖片描述
官方解答:官方用了遞迴 DFS(深度優先搜尋 Depth-First-Search),樹的最大深度 = 根節點的高度(根本身為 1 )+ 左右子樹的最大深度中的較大者。而左右子樹最大深度怎麼求呢?以左子樹為例,把它看成新的一棵樹,那麼它的最大深度就是:根節點的高度(根本身為 1 )+ 左右子樹的最大深度中的較大者。這樣就發現遞迴的所在點了。到臨界點即當樹根為空時,說明樹不存在,深度為 0,遞迴結束。

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func maxDepth(root *TreeNode) int {
    if root == nil{
        return 0
    }
    return max(maxDepth(root.Left), maxDepth(root.Right)) + 1
}

func max(a,b int)int {
    if a > b {
        return a
    }
    return b
}

相關文章