LeetCode: Binary Tree Level Order Traversal

来源:互联网 发布:4g转有线网络 编辑:程序博客网 时间:2024/06/05 23:56

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,#,#,15,7},

    3   / \  9  20    /  \   15   7

return its level order traversal as:

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

/** * Definition for binary tree * 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) {            vector<vector<int> > result;        if(root == NULL)            return result;        vector<vector<TreeNode* > > container(2);        int left = 0, right = 1;        container[left].push_back(root);        while(!container[left].empty())        {            vector<int> cur;            for(int i = 0; i < container[left].size(); i++)            {                       if(container[left][i] == NULL)                        continue;                    container[right].push_back(container[left][i]->left);                    container[right].push_back(container[left][i]->right);                    cur.push_back(container[left][i]->val);            }            if(!cur.empty())                result.push_back(cur);            cur.clear();            container[left].clear();            left = !left;            right = !right;        }        return result;            }};


Round 2:

/** * Definition for binary tree * 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) {    vector<vector<int>> result;    if(root == NULL)        return result;    int level = 0;    vector<TreeNode *> bfs[2];    int flip = 0;    bfs[flip].push_back(root);    while(!bfs[flip].empty())    {        vector<int> cur;        for(int i = 0; i < bfs[flip].size(); i++)        {            cur.push_back(bfs[flip][i]->val);            if(bfs[flip][i]->left)                bfs[!flip].push_back(bfs[flip][i]->left);            if(bfs[flip][i]->right)                bfs[!flip].push_back(bfs[flip][i]->right);        }        result.push_back(cur);        bfs[flip].clear();        flip = std::abs(1-flip);    }    return result;    }};

Round 3:

class Solution {public:    vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int> > result;if(root == NULL)return result;        vector<int> curLevel;vector<TreeNode*> nodes[2];nodes[0].push_back(root);curLevel.push_back(root->val);int index = 0;result.push_back(curLevel);while(!nodes[0].empty() || !nodes[1].empty()){curLevel.clear();for(int i = 0; i < nodes[index].size(); i++){if(nodes[index][i]->left){nodes[1-index].push_back(nodes[index][i]->left);curLevel.push_back(nodes[index][i]->left->val);}if(nodes[index][i]->right){nodes[1-index].push_back(nodes[index][i]->right);curLevel.push_back(nodes[index][i]->right->val);}}if(!curLevel.empty())    result.push_back(curLevel);nodes[index].clear();index = 1 - index;}return result;    }};



0 0