/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
#include <vector>
class Solution {
public:
	vector<vector<int>> creat(TreeNode* pRoot){
        vector<vector<int>> ans;
        if(pRoot==nullptr){
            return ans;
        }
        vector<int> t(1,pRoot->val);
        ans.push_back(t);
        vector<vector<int>> vecl=creat(pRoot->left);
        vector<vector<int>> vecr=creat(pRoot->right);
        for(int i=0;i<vecl.size();i++){
            if(i<vecr.size()){
                for(int j=0;j<vecr[i].size();j++){
                    vecl[i].push_back(vecr[i][j]);
                }
            }
            ans.push_back(vecl[i]);
        }
        if(vecr.size()>vecl.size()){
            for(int i=vecl.size();i<vecr.size();i++){
                ans.push_back(vecr[i]);
            }
        }
        return ans;
    } 
    vector<int> PrintFromTopToBottom(TreeNode* root) {
		vector<vector<int>> ans=creat(root);
		vector<int> a;
		for(int i=0;i<ans.size();i++){
			for(int j=0;j<ans[i].size();j++){
				a.push_back(ans[i][j]);
			}
		}
		return a;
    }
};