剑指offer(C++)-JZ78:把二叉树打印成多行(数据结构-树)
Posted 翟天保Steven
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer(C++)-JZ78:把二叉树打印成多行(数据结构-树)相关的知识,希望对你有一定的参考价值。
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
题目描述:
给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中返回。
例如:
给定的二叉树是1,2,3,#,#,4,5
该二叉树多行打印层序遍历的结果是
[
[1],
[2,3],
[4,5]
]
数据范围:二叉树的节点数0≤n≤1000,0≤val≤1000
要求:空间复杂度 O(n),时间复杂度 O(n)
示例:
输入:
1,2,3,#,#,4,5
返回值:
[[1],[2,3],[4,5]]
解题思路:
本题考察数据结构树的使用,运用了队列先入先出的特性。用队列动态存储某一层的节点,对其进行遍历,将节点的值放入vector的同时,把节点弹出队列,并将节点下一层的左右子树存放进队列中;当队列为空的时候,说明二叉树完全遍历,解题完毕。
测试代码:
/*
struct TreeNode
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL)
;
*/
class Solution
public:
vector<vector<int> > Print(TreeNode* pRoot)
vector<vector<int>> v;
if(!pRoot)
return v;
queue<TreeNode*> q;
// 根节点存入队列
q.push(pRoot);
// 队列存放了某一层的节点
while(!q.empty())
int size=q.size();
vector<int>temp;
// 遍历该层,并将其放入vector,弹出queue
while(size--)
TreeNode* node=q.front();
temp.push_back(node->val);
q.pop();
// 存下一层节点
if(node->left)
q.push(node->left);
if(node->right)
q.push(node->right);
v.push_back(temp);
return v;
;
以上是关于剑指offer(C++)-JZ78:把二叉树打印成多行(数据结构-树)的主要内容,如果未能解决你的问题,请参考以下文章