题目描述:
给定一个节点数为 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; } };