从上到下打印二叉树,层序遍历

文章目录

1、描述

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

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

3

/
9 20
/
15 7
返回:

[3,9,20,15,7]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2、关键字

二叉树,层序遍历

3、思路

使用队列queue,

4、notes

5、复杂度

时间:O(N)
空间:O(N)

6、code

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> levelOrder(TreeNode* root) {
        queue<TreeNode*>que;
        que.push(root);
        vector<int>res;
        if(!root) return res;  // 特判一下,不写不给过空案例: []
        while (!que.empty()){
            int n = que.size();
            while(n--){
                auto tem = que.front();
                que.pop();
                res.push_back(tem->val);
                if(tem->left) que.push(tem->left);
                if(tem->right) que.push(tem->right);
            }
        }
        return res;
    }
};

层序遍历只需要写一次就行
上面的代码是可以左到一层写一次的,下面就直接写到一起了,只是顺序也是一样的,只是没有按照每一层进行划分。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> levelOrder(TreeNode* root) {
        queue<TreeNode*>que;
        que.push(root);
        vector<int>res;
        if(!root) return res;  // 特判一下,不写不给过空案例: []
        while (!que.empty()){
            //int n = que.size();
            //while(n--){
                auto tem = que.front();
                que.pop();
                res.push_back(tem->val);
                if(tem->left) que.push(tem->left);
                if(tem->right) que.push(tem->right);
            //}
        }
        return res;
    }
};
上一篇:Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)


下一篇:代码实现矩阵求逆的三种方式(超详细、已实现)