/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:

    vector<int> PrintFromTopToBottom(TreeNode* root) {
        vector<vector<int> > list ;
        getList(root, list, 0);
        return printNum(list);
    }
    
    //注意传递引用,否则生成形参
    void getList(TreeNode* root, vector<vector<int> > &list, int deep){
        if(!root) return ;
        if(deep >= list.size()){
            //生成新列
            list.push_back(vector<int>());
        }
        list[deep].push_back(root->val);
        getList(root->left, list, deep + 1);
        getList(root->right, list, deep + 1);
    }
    
   vector<int> printNum(vector<vector<int>> list ){
       vector<int> ret;
       for(int i = 0 ; i < list.size(); i++){
           for(int j = 0 ; j < list[i].size(); j++){
               ret.push_back(list[i][j]);
           }
       }
       return ret;
   }
};