给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
class Solution {
public:
vector<vector<int>> ans;
void dfs(TreeNode *u,int dep)
{
if(u==NULL)return;
if(ans.size()==dep)ans.emplace_back();
ans[dep].push_back(u->val);
dfs(u->left,dep+1);//递归调用左子树
dfs(u->right,dep+1);//递归调用右子树
}
vector<vector<int>> levelOrder(TreeNode* root) {
dfs(root,0);
return ans;
}
};
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;
if(root==NULL)return ans;
queue<TreeNode *> qu;
queue<int> dep;
qu.push(root);
dep.push(0);
while(!qu.empty())
{
TreeNode *u=qu.front();qu.pop();
int d=dep.front();dep.pop();
if(d==ans.size())ans.emplace_back();
ans[d].push_back(u->val);
if(u->left!=NULL)qu.push(u->left),dep.push(d+1);
if(u->right!=NULL)qu.push(u->right),dep.push(d+1);
}
return ans;
}
};