LeetCode二叉樹層次遍歷(binary-tree-level-order-traversal-ii)

1、主題

  • 難度:簡單node

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

  • 題目地址:https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/數組

  • 題目內容bash

    給定一個二叉樹,返回其節點自底向上的層次遍歷
    (即從葉子節點所在層到根節點所在層,逐層從左到右遍歷,整體以數組形式呈現,每層以子數組形式呈現)
    
    e.g.
    給定一個二叉樹[3,9,20,null,null,15,7]
    
    圖形呈現:
        3
       / \
      9  20
        /  \
       15   7
    
    返回自底向上遍歷該二叉樹的數組:
    [
     [15,7],
     [9,20],
     [3]
    ]
    複製代碼


2、解題

  • 用例:

    題目給定用例:[3,9,20,null,null,15,7]
    
    /**
     * Definition for a binary tree node.
     * function TreeNode(val) {
     *     this.val = val;
     *     this.left = this.right = null;
     * }
     */
    /**
     * @param {TreeNode} root
     * @return {number[][]}
     */
    由編輯器頂部給定的形式,可判斷二叉樹root的結構爲
    輸入方法的參數root,即測試用例以下:
    let root = {
        val: 3,
        left: {
            val: 9, left: null, right: null
        },
        right: {
            val: 20,
            left: {
                val: 15, left: null, right: null
            },
            right: {
                val: 7, left: null, right: null
            }
        }
    };複製代碼

  • 解題步驟:

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var levelOrderBottom = function (root) {
    if (!root) {
        return [];//輸入的方法root爲空,則表明這是個空的二叉樹
    }
    let result = [];

    //遍歷root的方法,depth表示遍歷到二叉樹的哪一層,初始時候爲0(即第一層),運行後在方法內進行自增
    let showList = function (root, depth) {
        if (!root || root.val == null) {
            return; //輸入的二叉樹節點爲空,或節點值爲空
        }
        //查找本層級是否已經有遍歷
        if (!result[depth]) {
            result[depth] = [];//若是沒有被遍歷則初始化該層爲一個數組,其中一個層級理解爲一個子數組
        }
        result[depth] = [root.val,...result[depth]
    ]
        ;//此處爲es6擴展符寫法,意爲將root.val推入result[depth]原有項
        depth += 1;
        showList(root.right, depth);//因爲是遍歷的val值插入同層級子數組的最前一項,因此要先遍歷right子節點,才能造成最後左節點在右節點前項
        showList(root.left, depth);
    };
    showList(root, 0);

    return result.reverse();//因爲題目要求是從底層往頂層輸出遍歷結果,則只須要reverse處理便可
};
複製代碼

  • 解題思路:
    • 後續遍歷(LRC)思路

遍歷順序爲:3,20,7,15,9  而後依次插入對應層級depth的子數組
複製代碼

    • depth層級參數

depth在方法中既表示層級,也表示層級對應的子數組編號,在遍歷結果result中充當對應關係。複製代碼
相關文章
相關標籤/搜索