102. Binary Tree Level Order Traversal(BFS)

来源:互联网 发布:软件大数据咨询顾问 编辑:程序博客网 时间:2024/06/16 03:30

1.Description

Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).

For example:
Given binary tree [3,9,20,null,null,15,7],

    3   / \  9  20    /  \   15   7

return its level order traversal as:

[  [3],  [9,20],  [15,7]]

2. code

regular solution i always do

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<vector<int>> levelOrder(TreeNode* root) {           if(root == NULL) return {};           vector<vector<int>> ret;           vector<int> tmp;           queue<TreeNode *> q;           tmp.push_back(root->val);           ret.push_back(tmp);           q.push(root);           TreeNode * node;           while(!q.empty()) {                //node = q.front();                tmp.clear();                for(int i = 0, n = q.size(); i < n; i++) {                        node = q.front();                        q.pop();                        if(node->left != NULL) {                            tmp.push_back(node->left->val);                            q.push(node->left);                           }                        if(node->right != NULL) {                            tmp.push_back(node->right->val);                            q.push(node->right);                        }                   }               if(!tmp.empty())                   ret.push_back(tmp);           }           return ret;    }};

code from others

which i think is better

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {    vector<vector <int>> res;public:    vector<vector<int>> levelOrder(TreeNode* root) {        build(root, 0);        return res;    }    void build(TreeNode *root, int depth)    {        if(root == NULL)            return;        if(res.size() == depth)            res.push_back(vector<int>());        res[depth].push_back(root->val);        build(root->left, depth+1);        build(root->right, depth+1);    }};