二叉樹層次遍歷

 

二叉樹層次遍歷。使用vector,queue

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

class LinkTree{
    public:
    int val;
    LinkTree* left;
    LinkTree* right;
    LinkTree(int v):val(v),left(NULL),right(NULL){};
};

class Tree{
    public:
        vector<vector<int>> Level(LinkTree* root){
            vector<vector<int>> arr;
            if(root == NULL) return arr;

            
            queue<LinkTree*> q;
            q.push(root);        

            while(!q.empty()){
                int count = q.size();
                vector<int> arry;
                for(int i = 0; i<count; i++){
                    LinkTree* tmp = q.front();
                    q.pop();
                    arry.push_back(tmp->val);
                    if(tmp->left) q.push(tmp->left);
                    if(tmp->right) q.push(tmp->right);    
                }
                arr.push_back(arry);
            }
            return arr;
        }
};

int main(){
    Tree T;
    LinkTree tree(1);
    tree.left = new LinkTree(2);
    tree.right = new LinkTree(3);
    
    vector<vector<int>> arrys;
    arrys = T.Level(&tree);
    for(int i=0; i<arrys.size(); i++){
        for(int j=0; j<arrys[i].size(); j++){
            cout<<arrys[i][j]<<" ";    
        }
        cout<<endl;
    }
    return 0;
}
完整版

 

posted @ 2020-03-24 21:40  谁给起个名  阅读(161)  评论(0)    收藏  举报