• Binary Tree Level Order Traversal II


    https://leetcode.com/problems/binary-tree-level-order-traversal-ii/#/solutions

    这题跟层序遍历没有什么不同,只是把最后结果reverse 一下而已。不知道还有没有其他的套路?

    可以分别用BFS 和DFS,后者要更简洁一点。

    BFS:

    /**
     * @param {TreeNode} root
     * @return {number[][]}
     */
    var levelOrderBottom = function(root) {
        var queue = [[root]];
        var ret = [];
        while (queue.length !== 0) {
            var top = queue.shift();
            var tr = [];
            var tq = [];
            for (var i = 0; i < top.length; i++) {
                if (top[i]) {
                    tr.push(top[i].val);
                    tq.push(top[i].left, top[i].right);
                }
            }
    
            if (tq.length > 0) queue.push(tq);
            if (tr.length > 0) ret.push(tr);
        }
        return ret.reverse();
    };

    DFS:

    var levelOrderBottom = function(root) {
        var ret = [];
        function iter(node, level, ret) {
            if (!node) return;
            ret[level] = ret[level] || [];
            ret[level].push(node.val);
            iter(node.left, level+1, ret);
            iter(node.right, level+1, ret);
        }
    
        iter(root, 0, ret);
        return ret.reverse();
    }

    写这题没花什么时间,但是写构造二叉树的代码和测试倒是挠头了一下T_T

    通过层序数组构造二叉树,中序遍历和层序遍历

    function TreeNode(val) {
        this.val = val;
        this.left = this.right = null;
    }
    
    function makeTree(arr) {
        function makeIter(i, limit) {
            if (!arr[i]) return null;
            if (i >= limit) return null;
            var node = new TreeNode(arr[i]);
            node.left = makeIter(2*i+1, limit);
            node.right = makeIter(2*i+2, limit);
            return node;
        }
    
        return makeIter(0, arr.length);
    }
    
    function middleOrderTraversal(node) {
        function iter(node, ret) {
            if (!node) {ret.push(null); return;}
            ret.push(node.val);
            iter(node.left, ret);
            iter(node.right, ret);
        }
    
        var ret = [];
        iter(node, ret);
        console.log(ret);
    }
    
    function levelOrderTraversal(node) {
        var queue = [node];
        var ret = [];
        while (queue.length !== 0) {
            var top = queue.shift();
            if (top !== null) {
                ret.push(top.val);
                queue.push(top.left, top.right);
            } else {
                ret.push(null);
            }
        }
    
        console.log(ret);
    }
  • 相关阅读:
    python学习之函数的参数
    python学习之文件修改及函数基础作业
    日志模块与 re 模块
    day23
    常用模块(二)
    day 22
    python 常用模块
    软件开发目录规范
    day 20
    python 的模块与包
  • 原文地址:https://www.cnblogs.com/agentgamer/p/7040055.html
Copyright © 2020-2023  润新知