层级遍历二叉树

来源:互联网 发布:淘宝店铺托管费用 编辑:程序博客网 时间:2024/06/05 03:03

这里写图片描述

第一种方法就是用队列实现

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
这里写图片描述

0 0