1.问题描述
2.问题分析
简单的广度优先搜索和深度优先搜索问题,要用到反转容器的元素顺序的函数
reverse(begin(tem),end(tem));
3.代码实现
3.1C++代码
/**
* 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<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> vec;
queue<TreeNode*> q;
if(root!=NULL)
q.push(root);
int cnt=0;
while(!q.empty())
{
vector<int> tem;
int len=q.size();//表示每一层的结点个数
for(int i=0;i<len;i++)
{
TreeNode *t=q.front();//返回队列中的第一个元素
tem.push_back(t->val);
q.pop();//既然第一个元素已经使用过了就出队
if(t->left!=NULL)
q.push(t->left);
if(t->right!=NULL)
q.push(t->right);
}
cnt++;
if(cnt%2==1)
vec.push_back(tem);
else
{
reverse(begin(tem),end(tem));
vec.push_back(tem);
}
}
return vec;
}
};
3.2Java代码
public class Solution {
private List<List<Integer>> ret;
public List<List<Integer>> levelOrder(TreeNode root) {
ret = new ArrayList<>();
dfs(0, root);
return ret;
}
private void dfs(int depth, TreeNode root) {
if (root == null) {
return;
}
if (ret.size() == depth) {
ret.add(new LinkedList<>());
}
if ((depth & 1) == 1) {
ret.get(depth).add(0, root.val);
} else {
ret.get(depth).add(root.val);
}
dfs(depth + 1, root.left);
dfs(depth + 1, root.right);
}
}