Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
Example
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
Challenge
Challenge 1: Using only 1 queue to implement it.
Challenge 2: Use DFS algorithm to do it.
解题思路:
利用一个队列来辅助层级遍历,先将root push进队列,再pop出来,将当前pop出的元素存进vector中,考察当前队列front元素是否有左右孩子,若有则将其左右孩子push进队列中,循环操作,直到队列为空,则表明所有元素都按照层级关系存进vector中。
注意本题需要的结果是保存在一个二维数组中,每一个层级的数据占据一行,所以单独对层级加一个一维数组temp暂存,再将temp存进result二维数组中。
/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */ class Solution { public: /** * @param root: A Tree * @return: Level order a list of lists of integer */ vector<vector<int>> levelOrder(TreeNode * root) { // write your code here vector<vector<int>> result; if(root == NULL) return result; queue<TreeNode *> q;//队列辅助 q.push(root); while(!q.empty()) { vector<int> temp; int len = q.size(); while(len--)//因为是二维数组,每一行都是一个单独的层级,所以用temp来暂存每一层数据 { TreeNode * node = q.front(); q.pop(); temp.push_back(node->val); if(node->left != NULL) q.push(node->left); if(node->right != NULL) q.push(node->right); } result.push_back(temp);//一层一层push进二维数组得到结果 } return result; } };