从上到下打印二叉树
题目:
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [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
解决方法:
利用队列先进先出的特点,用队列来存储每层的节点,再按次序弹出。即层次遍历。
需要用到的知识:
c++ vector的使用方法:
vector<int>res;//定义一维数组
vector<vector<int>>res//定义二维数组
//在res的末尾插入元素:
res.push_back(a)//a是要插入的元素
res.front();//读取第一个元素
res.back();//读取最后一个元素
//sort是排序函数,必须添加#include<algorithm>头文件。该函数有三个参数,分别为要排序的数组的开
//头,要排序的数组的结尾和排序的方式,默认为从小到大排序。
sort(res.begin(),res.end());
c++ queue的应用方法:
push() 队列中由于是先进先出,push即在队尾插入一个元素
pop() 将队列中最靠前位置的元素拿掉,是没有返回值的void函数
size() 返回队列中元素的个数,返回值类型为unsigned int
empty() 判断队列是否为空
front() 返回值为队列中的第一个元素
back() 返回队列中最后一个元素
代码实现:
class Solution {
public:
vector<int> levelOrder(TreeNode* root) {
vector<int>a;//定义一个int型向量a
//如果为空树
if(root==NULL){
return a;
}
queue<TreeNode*>q;//队列q
q.push(root);//将根节点插入队列q
while(!q.empty()){
TreeNode* t=q.front();//返回队列的第一个元素给t
q.pop();//将队列中最靠前位置的元素拿掉(没有返回值)
a.push_back(t->val);//将t节点的元素插入向量a
if(t->left){
q.push(t->left);
}
if(t->right){
q.push(t->right);
}
}
return a;
}
};