LeetCode 二叉樹的最大深度(maximum-depth-of-binary-tree)

1、主題

  • 難度:簡單bash

  • 涉及知識:樹、廣度優先搜索ui

  • 題目地址:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/spa

  • 題目內容code

    給定一個二叉樹,找出其最大深度。
    
    二叉樹的深度爲根節點到最遠葉子節點的最長路徑上的節點數。
    
    說明: 葉子節點是指沒有子節點的節點。
    
    示例:
    給定二叉樹 [3,9,20,null,null,15,7],
    
        3
       / \
      9  20
        /  \
       15   7
    返回它的最大深度 3 。
    複製代碼

2、解題

  • 用例
    題目給定用例 [3,9,20,null,null,15,7]
    
    輸入方法的root元數據:
    let root = {
        val: 1,
        left: {
            val: 2, left: null, right: null
        },
        right: {
            val: 3,
            left: {
                val: 4, left: null, right: {
                    val: 5,
                    left: {
                        val: 6, left: null, right: null
                    },
                    right: {
                        val: 7, left: null, right: null
                    }
                },
            },
            right: {
                val: 8, left: null, right: null
            }
        }
    };複製代碼

  • 解題步驟:

    var maxDepth = function (root) {
        if (!root) {
            return 0;
        }//檢查輸入的元數據
    
        //初始化最大深度爲1
        let longestDepth = 1;
        let getDepth = function (root, depth) {
            if (!root) {
                return;//檢測輸入該節點的值,若爲空則表明此路線已遍歷到底
            }
            if (root.left || root.right) {
                depth += 1;
                if (depth > longestDepth) {
                    longestDepth = depth;//當前遍歷層級保持最大,由於有可能遍歷回上層的depth
                }
    
                getDepth(root.left, depth);//優先遍歷左側子節點
                getDepth(root.right, depth);
            }
        }
        getDepth(root, 1);
        return longestDepth;
    }複製代碼

  • LeetCode Submit

    執行用時 :200 ms, 在全部 JavaScript 提交中擊敗了5.23%的用戶
    內存消耗 :44.6 MB, 在全部 JavaScript 提交中擊敗了5.15%的用戶複製代碼

3、解析

  • 廣度優先遍歷二叉樹(隊列:先壓左節點,再壓右節點)
  • 拓展:更簡潔的方法(在題解的大神裏面看到的)

    var maxDepth1 = function (root) {
        if (!root) {
            return 0;
        }
        return Math.max(maxDepth1(root.left), maxDepth1(root.right)) + 1;
    };複製代碼
相關文章
相關標籤/搜索