二叉樹和多叉樹的遍歷

二叉樹前序遍歷 leetcode114node

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var preorderTraversal = function(root) {
    if(root){
        return [root.val,...preorderTraversal(root.left),...preorderTraversal(root.right)]
    }else{
        return []
    }
};

二叉樹中序遍歷 leetcode94數組

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var arr=[]//結果
var inorderTraversal = function(root) { 
    //遞歸終止條件
    if(root==null) return arr
    if(root){
        return [...inorderTraversal(root.left),root.val,...inorderTraversal(root.right)]
    }
};

二叉樹後序遍歷 leetcode145函數

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var postorderTraversal = function(root) {
    if(root==null) return[];
    if(root) return [...postorderTraversal(root.left),...postorderTraversal(root.right),root.val]
};

二叉樹層序遍歷(由上至下)leetcode102post

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var levelOrder = function(root) {
    if (!root) return []
    let res = []//保存結果
    let queue = [root]
    while (queue.length) { // 沒有節點在列,就是遍歷完畢
        let subRes = []
        const len = queue.length // 當前層的節點數目
        for (let i = 0; i < len; i++) { // 遍歷當前層的節點
            let cur = queue.shift() // 出列
            subRes.push(cur.val) // 填充subRes數組
            if (cur.left) queue.push(cur.left) // 下層節點入列
            if (cur.right) queue.push(cur.right)
        }
        res.push(subRes)
    }
return res    
};

二叉樹的層序遍歷(下至上)leetcode107this

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var levelOrder = function(root) {
    if (!root) return []
    let res = []//保存結果
    let queue = [root]
    while (queue.length) { // 沒有節點在列,就是遍歷完畢
        let subRes = []
        const len = queue.length // 當前層的節點數目
        for (let i = 0; i < len; i++) { // 遍歷當前層的節點
            let cur = queue.shift() // 出列
            subRes.push(cur.val) // 填充subRes數組
            if (cur.left) queue.push(cur.left) // 下層節點入列
            if (cur.right) queue.push(cur.right)
        }
        res.push(subRes)
    }
return res    
};

N插樹的前序遍歷 leetcode589code

/**
 * // Definition for a Node.
 * function Node(val, children) {
 *    this.val = val;
 *    this.children = children;
 * };
 */

/**
 * @param {Node} root
 * @return {number[]}
 */
var preorder = function(root) {
    if(root==null) return []//判空
    var childs=[]//結果集
    recusion(root);//執行函數
    return childs;//返回結果集
    //函數定義
    function recusion(root){
        if(root==null) return
        var len=root.children.length
        childs.push(root.val)
        for(let i=0;i<len;i++){
            recusion(root.children[i])
        }
    }
};

N插樹的後序遍歷 leetcode590遞歸

/**
 * // Definition for a Node.
 * function Node(val,children) {
 *    this.val = val;
 *    this.children = children;
 * };
 */

/**
 * @param {Node} root
 * @return {number[]}
 */
var postorder = function(root) {
    if(root==null) return []
    var res=[]//結果集
    gets(root)//執行函數
    return res//返回結果
    //函數定義
    function gets(root){
        if(root==null) return
        var len=root.children.length//子節點數量
        for(var i=0;i<len;i++){//遍歷子節點
            gets(root.children[i])//深度
        }
        res.push(root.val)//從葉子節點開始存儲
    }
};

N插樹的層序遍歷 leetcode429leetcode

/**
 * // Definition for a Node.
 * function Node(val,children) {
 *    this.val = val;
 *    this.children = children;
 * };
 */

/**
 * @param {Node} root
 * @return {number[][]}
 */
var levelOrder = function(root) {
    if(root==null) return []
    var res=[]//結果集
    var queue=[root]//先放入樹的根節點
    while(queue.length){
        var subarr=[]//保存當前層的節點
        const len=queue.length//當前層的長度
        for(let i=0;i<len;i++){//只遍歷當前層
            var curr=queue.shift()//出列
            subarr.push(curr.val)//放進subarr
            if(curr.children!=null){//存在子節點
                queue.push(...curr.children)//當前層的下一層節點
            }  
        }
        res.push(subarr)
    }
    return res
};
相關文章
相關標籤/搜索