1. 程式人生 > >LintCode - Binary Tree Level Order Traversal

LintCode - Binary Tree Level Order Traversal

解法一 queue

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode * root) {
        queue<TreeNode*> q;
        vector<vector<int>> res;
        if(!root) return res;
        q.push(root);
        while(!q.empty()){
            int n = q.size();
            vector<int> temp;
            for(int i=0;i<n;i++){
                TreeNode* node = q.front(); q.pop();
                temp.push_back(node->val);
                if(node->left) q.push(node->left);
                if(node->right) q.push(node->right);
            }
            res.push_back(temp);
        }
        return res;
    }
};

解法二 DFS

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode * root) {
        vector<vector<int>> res;
        helper(root, 0, res);
        return res;
    }
    void helper(TreeNode* root, int level, vector<vector<int>>& res){
        if(!root) return;
        if(res.size()<=level){
            res.push_back(vector<int>{root->val});
        }else{
            res[level].push_back(root->val);
        }
        helper(root->left, level+1, res);
        helper(root->right, level+1, res);
    }
};