按层打印,换层换行
class TreePrinter {
public:
vector<vector<int> > printTree(TreeNode* root) {
// write code here
TreeNode* last;
TreeNode* nlast;
vector<int> temp; //用于保存每一层的值
queue<TreeNode*> tmp; //用于保存遍历的树节点
vector<vector<int> > res;
last=root;
nlast=root;
tmp.push(root);
while(!tmp.empty()){
last=tmp.front(); //last为队列的头,即为遍历的节点
tmp.pop();
temp.push_back(last->val);
if(last->left) tmp.push(last->left); //将当前遍历的节点的左右子节点放入队列中
if(last->right) tmp.push(last->right);
if(last==nlast){
nlast=tmp.back(); //当last==nlast,下一层的所有节点必然已经全部放入队列中,于是让nlast=tmp的末尾,即为下一行的最后一个节点
res.push_back(temp);
temp.clear();
}
}
return res;
}
};