第一种方法就是用队列实现
class Solution {
public:
void levelorder(TreeNode* root){
if(!root) return;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
TreeNode* temp=q.front();
cout<<temp->val<<" ";
q.pop();
if(temp->left)
q.push(temp->left);
if(temp->right)
q.push(temp->right);
}
}
};
根节点入列——转移给临时指针,输出后删除——temp(root)左右节点入列——不断循环,先进先出,先左后右
第二种方法根据level值每层输出,但是 重复工作较多,并不推荐
class Solution {
public:
int print_level(TreeNode* root,int level){
if(!root||level<0) return 0;
if(level==0){
cout<<root->val<<" ";
return 1;
}
return print_level(root->left,level-1)+print_level(root->right,level-1);
}
void levelorder(TreeNode* root){
for(int i=0;;i++){
if(!print_level(root,i))
break;
}
}
};
懒得画图了,附上一张草稿纸好了QVQ