两种方式实现打印二叉树,同时练习DFS和BFS 好题
DFS:
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
dfs(root,res,0);
return res;
}
void dfs(TreeNode* root,vector<vector<int>>& res,int level)
{
if(!root) return;
if(level>=res.size()) res.emplace_back(vector<int>());
res[level].emplace_back(root->val);
dfs(root->left,res,level+1);
dfs(root->right,res,level+1);
}
};
BFS:
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>>res;
if(root==NULL)return res;
queue<TreeNode*>q;
q.push(root);
while(!q.empty()){
vector<int>r;
int l=q.size();
for(int i=0;i<l;i++){ //当前层节点都在队列中,依次取出
TreeNode* t=q.front();
r.push_back(t->val);
q.pop();
if(t->left)q.push(t->left);
if(t->right)q.push(t->right);
}
res.push_back(r);
}
return res;
}
};