美文网首页
二叉树层级遍历

二叉树层级遍历

作者: RichardBillion | 来源:发表于2019-12-16 14:35 被阅读0次

    题目: 有二叉树如下, 按层级输出结果: [[3], [9, 20], [15, 7]]

        3
       / \
      9  20
        /  \
       15   7
    
    /**
     * Definition for a binary tree node.
     * function TreeNode(val) {
     *     this.val = val;
     *     this.left = this.right = null;
     * }
     */
    

    原题链接: https://leetcode-cn.com/problems/binary-tree-level-order-traversal/

    解法1: 基于DFS

    遍历时,添加第二个参数,记录层级深度

    function levelOrder(root) {
        let arr = [];
        if(!root) {
            return []
        }
        function dfs(node, level) {
            if(!arr[level]) {
                arr[level] = [];
            }
            arr[level].push(node.val);
    
            if(node.left) {
                dfs(node.left, level+1);
            }
            if(node.right) {
                dfs(node.right, level + 1);
            }
        }
        dfs(root, 0);
        return arr;
    };
    

    解法2:基于BFS

    function bfs(tree) {
        let arr = [];
        let res = [];
        let count  = 0;
        
        arr.push([tree]);
    
        while(count < arr.length) {
            const nodeArr = arr[count++];
            res.push(nodeArr.map(n => n.val));
    
            const nextLevelNodes = nodeArr.reduce((prev, cur) => {
                if(cur.left){
                    prev.push(cur.left);
                }
                if(cur.right) {
                    prev.push(cur.right);
                }
                return prev;
            }, []);
    
            if(nextLevelNodes.length) {
                arr.push(childNodeArr);
            }
        }
        return res;
    }
    

    相关文章

      网友评论

          本文标题:二叉树层级遍历

          本文链接:https://www.haomeiwen.com/subject/keyhnctx.html