例题-把二叉树打印成多行

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

原理

这个问题就是二叉树的层序遍历,即先把根节点入队,再把该节点的左右子节点(如果有的话)入队,循环直至无子节点。

代码实现

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
class TreeNode
{
public:
int data;
TreeNode* lchild = nullptr;
TreeNode* rchild = nullptr;
TreeNode(int data) :data(data) {};
~TreeNode() {};
};
class Tree {
public:
vector<vector<int> > Print(TreeNode* pRoot)
{
vector<vector<int>> res;
if(pRoot == nullptr)
return res;
queue<TreeNode*> que;
que.push(pRoot);
while(!que.empty())
{
vector<int> line;
int size = que.size();
for(int i = 0;i < size ;i++)
{
TreeNode* front = que.front();
que.pop();
if(front->left)
que.push(front->lchild);
if(front->right)
que.push(front->rchild);
line.push_back(front->data);
}
res.push_back(line);
}
return res;
}
};

例子1

输入为

1
{8,6,10,5,7,9,11}

输出为

1
2
[[8],[6,10],[5,7,9,11]]

例子2

输入为

1
{7,9,8,#,5,6,2,#,1,4}

输出为

1
[[7],[9,8],[5,6,2],[1,4]]