刷题-从上到下打印二叉树

Posted on 2022-02-10 00:11  AcTourist  阅读(38)  评论(0)    收藏  举报

一、题目

 

 

二、重点难点分析

  1.因为按层打印的顺序决定应该先打印节点,所以我们从树的根节点开始分析:(1)为了能打印8的节点的子节点,我们应该在遍历到该节点时把值6和10两个节点保存到一个容器里,此时容器里有两个节点6,10(2)因为按照从左到右打印,所以把6拿出来,为了打印6的节点的子节点,把它的值5和7放入容器里,此时容器里为10,5,7(3)因为10 比5和7 都要早放,所以先拿出10进行遍历(注意:这就是我们通常说所说的队列,先入先出)

  2.从上面分析可以得出该数据是一个队列。

三、代码分析

/**
 * 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==null) return [];
    let queue = [];
    let res = [];
    queue.push(root);

    while(queue.length){
        let top = queue.shift();
        res.push(top.val);
        if(top.left){
            queue.push(top.left);
        }
        if(top.right){
            queue.push(top.right);
        }
    }
    return res;
};

四、扩展题

 

 

 

一、重点难点分析

  1.按层次输出,原理和上一题是一样的,不过我们设置一个temp来进行保存该层的元素,然后放到res里(注意:因为层里面的元素不同,temp也会相应改变,所以我们这里声明用val)

二、代码分析

/**
 * 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 == null) return [];
    let queue = [];
    queue.push(root);
    let res = [];

    while(queue.length){
        var temp = [];
        let size = queue.length;
        for(let i = size; i>0; i--){
            let top = queue.shift();
            temp.push(top.val);
            if(top.left){
                queue.push(top.left);
            }
            if(top.right){
                queue.push(top.right);
            }
        }
         res.push(temp);
    }
    return res;
};