剑指Offer JavaScript leetcode刷题 第6天 搜索与回溯算法(简单)

131 阅读2分钟

剑指 Offer 32 - I. 从上到下打印二叉树

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

例如: 给定二叉树: [3,9,20,null,null,15,7],

3

/ \ 9 20 / \ 15 7 返回:

[3,9,20,15,7]

提示:

节点总数 <= 1000

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/co… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

/**
 * 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) {
    // 23点12分
    // 通过数字计算当前是第几层,然后把数字放进去
    // 直接放入就可以了,如果下一个不为空,就进行push
    if(!root) return []
    const res = []; //用来存储数据
    const queue = [root]; // 用来存储队列
​
    // 队列的长度
    while (queue.length) {
        //  取出第一个
        const first = queue.shift();
        // 放入第一个数值
        res.push(first.val);
        // 放入队列
        first.left && queue.push(first.left);
        // 放入队列
        first.right && queue.push(first.right);
    }
​
    return res
};

剑指 Offer 32 - II. 从上到下打印二叉树 II

这道题目的话,跟上面的题目不同的是,这个的话,有用到逐次的对字符串进行遍历,将二叉树分层次

/**

  • 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) {

// 分层次输入内容

var res = []

var tem = []

// 根和层数

var shenru = function(root,num){

if(root == null) return

if(res[num] == undefined){

tem = []

res[num] = tem

}

res[num].push(root.val)

// 设置返回条件

if(root.left == null && root.right == null){

return

}

//深入左一层

root.left && shenru(root.left,num + 1)

//深入右一层

root.right && shenru(root.right,num + 1)

}

shenru(root,0)

return res

};

剑指 Offer 32 - III. 从上到下打印二叉树 III

这道题目的话,跟上面那道题目差不多,多了一个知识点就是

数组从前面插入使用unshift,后面插入用push

请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

例如: 给定二叉树: [3,9,20,null,null,15,7],

3

/ \ 9 20 / \ 15 7 返回其层次遍历结果:

[ [3], [20,9], [15,7] ]

提示:

节点总数 <= 1000

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/co… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

/**
 * 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) {
    // 分层次输入内容
    // 记住这里的,数组从前面插入使用unshift,后面插入用push
    var res = []
    var tem = []
    // 根和层数
    var shenru = function(root,num){
        if(root == null) return
        if(res[num] == undefined){
            tem = []
            res[num] = tem
        }
        if(num % 2 == 0){
            res[num].push(root.val)
        }else{
            res[num].unshift(root.val)
        }
        // 设置返回条件
        if(root.left == null && root.right == null){
            return
        }
​
        //深入左一层
        root.left && shenru(root.left,num + 1)        
        //深入右一层
        root.right && shenru(root.right,num + 1)        
    }
    shenru(root,0)
    return res
};