剑指offer——32.1 从上往下打印二叉树

32.1 从上往下打印二叉树

NowCoder

题目描述

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

例如,以下二叉树层次遍历的结果为:1,2,3,4,5,6,7


解题思路

使用队列来进行层次遍历。

不需要使用两个队列分别存储当前层的节点和下一层的节点,因为在开始遍历一层的节点时,当前队列中的节点数就是当前层的节点数,只要控制遍历这么多节点数,就能保证这次遍历的都是当前层的节点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/****层序遍历
设计一个queue
front 指针指向root
1、先加入front

2、循环整个queue
1)加入front的左右节点
2)弹出对头
*/

/**
* 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> printFromTopToBottom(TreeNode* root) {
vector<int> vec;
if(!root) return vec;
queue<TreeNode*> que;
TreeNode* front = nullptr;
que.push(root);

while(!que.empty())
{
//加入左右节点
front = que.front();
vec.push_back(que.front()->val);
if(front->left) que.push(front->left);
if(front->right) que.push(front->right);

//弹出队头
que.pop();
}
return vec;
}
};
创作不易,欢迎打赏!
-------------本文结束感谢您的阅读-------------