[LeetCode]Binary Tree Level Order Traversal

来源:互联网 发布:perl json 格式化输出 编辑:程序博客网 时间:2024/04/28 10:15
struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {//BFS is always work for the level order traverse of a tree//all we need is add some additional information, to solve the specific problem of level order typepublic:vector<vector<int>> LevelOrder_BFS(TreeNode* root){vector<vector<int>> ans;if(!root)//put the null tree judge here will be more neetreturn ans;queue<pair<TreeNode*, int>> q;int stepNow = 0;q.push(make_pair(root, stepNow));vector<int> curLevel;while(!q.empty()){TreeNode* curNode = q.front().first;int curStep = q.front().second;q.pop();if(curStep != stepNow){ans.push_back(curLevel);curLevel.clear();stepNow = curStep;}curLevel.push_back(curNode->val);if(curNode->left)q.push(make_pair(curNode->left, curStep+1));if(curNode->right)q.push(make_pair(curNode->right, curStep+1));}ans.push_back(curLevel);//note: we should remember the last level herereturn ans;}    vector<vector<int> > levelOrder(TreeNode *root) {        // Start typing your C/C++ solution below        // DO NOT write int main() functionreturn LevelOrder_BFS(root);    }};

second time

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    struct Node    {        TreeNode* treeNode;        int level;        Node(TreeNode* _treeNode = NULL, int _level = 0):treeNode(_treeNode), level(_level){};    };    vector<vector<int> > levelOrder(TreeNode *root) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        if(root == NULL) return vector<vector<int> >();        queue<Node> nodeQ;        nodeQ.push(Node(root, 1));        int prevLevel = 0;        vector<int> curLevelAns;        vector<vector<int> > allLevelAns;        while(!nodeQ.empty())        {            TreeNode* curNode = nodeQ.front().treeNode;            int curLevel = nodeQ.front().level;            nodeQ.pop();            if(curNode == NULL) continue;            if(curLevel != prevLevel)            {                if(prevLevel != 0) allLevelAns.push_back(curLevelAns);                curLevelAns.clear();            }            prevLevel = curLevel;            curLevelAns.push_back(curNode->val);            nodeQ.push(Node(curNode->left, curLevel+1));            nodeQ.push(Node(curNode->right, curLevel+1));        }        allLevelAns.push_back(curLevelAns);                return allLevelAns;    }};