二叉樹的前序遍歷

給你二叉樹的根節(jié)點(diǎn) root ,返回它節(jié)點(diǎn)值的 前序 遍歷。

image.png

[1,7,8,null,2,3,4,2,3,4,null,5]
提示:

樹中節(jié)點(diǎn)數(shù)目在范圍 [0, 100] 內(nèi)
-100 <= Node.val <= 100

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */

/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var preorderTraversal = function(root) {
    var newArrL = [],  newArrR = []
    if (!root || root.length == 0) {return []}
    if (root.left == null && root.right == null ) {
        return [root.val]
    } else {
        if (root.left != null)  {
            let temp = preorderTraversal(root.left)
            newArrL = newArrL.concat(temp) 
        }
        if (root.right != null)  {
            let temp = preorderTraversal(root.right)
            newArrR = newArrR.concat(temp) 
        } 
    }
    const newa = [root.val].concat(newArrL, newArrR)
    return newa
};

進(jìn)階:遞歸算法很簡單,你可以通過迭代算法完成嗎?

/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var preorderTraversal = function(root) {

    let queue = []
    let arr = []
    while(root) {
        queue.push(root)
        arr.push(root.val)
        root = root.left
    }
    
    
    let next = function() {
        root = queue.pop()
        if (root.right) {
            root = root.right
            while(root) {
                queue.push(root)
                arr.push(root.val)
                root = root.left
            }
        }
    }
    let hasNext = function() {
        return queue.length > 0
    }

    while(hasNext()){
        next()
    }
    return arr
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容