给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)
示例:
二叉树:[3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
解法一:利用迭代的方式,即BFS
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
queue<TreeNode*> level_node;
if(root) level_node.push(root);
while(!level_node.empty()) {
vector<int> level_node_val;
int length = level_node.size();
while(length--) {
TreeNode* tmp = level_node.front();
level_node.pop();
level_node_val.push_back(tmp->val);
if(tmp->left) level_node.push(tmp->left);
if(tmp->right) level_node.push(tmp->right);
}
res.push_back(level_node_val);
}
return res;
}
};
解法二:利用递归的方式,即DFS,这个判断不太懂哦!
class Solution {
public:
vector<vector<int>> res;
vector<vector<int>> levelOrder(TreeNode* root) {
level_Traversal(root, 0);
return res;
}
void level_Traversal(TreeNode* root, int level) {
if(root) {
//这个判断不太懂
if(res.size() == level) res.resize(level + 1);
res[level].push_back(root->val);
level_Traversal(root->left, level + 1);
level_Traversal(root->right, level + 1);
}
}
};
共有条评论 网友评论