题目要求
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7],
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
题解
https://github.com/soulmachine/leetcode
递归
class Solution {
public:
void trasverse(TreeNode* root,int level,vector<vector<int>> &result){
if(!root) return;
if(level>result.size())
result.push_back(vector<int>());
result[level-1].push_back(root->val);
trasverse(root->left,level+1,result);
trasverse(root->right,level+1,result);
}
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> result;
trasverse(root,1,result);
return result;
}
};
执行用时 | 内存消耗 |
---|---|
8 ms | 14.9 MB |
迭代
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> result;
if(!root) return result;
queue<TreeNode*> cur,next;
vector<int> level;
cur.push(root);
while(!cur.empty()){
while(!cur.empty()){
TreeNode *node=cur.front();
cur.pop();
level.push_back(node->val);
if(node->left) next.push(node->left);
if(node->right) next.push(node->right);
}
result.push_back(level);
level.clear();
swap(next,cur);
}
return result;
}
};
执行用时 | 内存消耗 |
---|---|
8 ms | 14 MB |