LeetCode 102

Posted on 2016-10-19 21:08  徐岩  阅读(181)  评论(0)    收藏  举报

方法一:(迭代)

/**
 * 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) 
    {
        vector<vector<int>> v;
        if(root == NULL) return v;
        
        queue<TreeNode *> q;
        q.push(root);
        
        TreeNode *curNode = NULL;
        vector<int> a;
        while(!q.empty())
        {
            int len = q.size();
            for(size_t i = 0; i < len; i++)
            {
                curNode = q.front(); q.pop();
                a.push_back(curNode->val);
                if(curNode->left != NULL) q.push(curNode->left);
                if(curNode->right != NULL) q.push(curNode->right);
            }
            v.push_back(a);
            a.clear();
        }
        
        return v;
    }
};

方法二:(递归)

class Solution 
{
public:
    vector<vector<int>> levelOrder(TreeNode* root) 
    {
       vector<vector<int>> v;
       levelOrderHelp(root, 0, v);
       return v;
    }
    
    void levelOrderHelp(TreeNode *root, int level, vector<vector<int>>& v)
    {
        if(root == NULL) return;

     // 注意
if(level >= v.size()) v.push_back(vector<int>()); v[level].push_back(root->val); levelOrderHelp(root->left, level + 1, v); levelOrderHelp(root->right, level + 1, v); } };