题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { vector<vector<int> > v; public: vector<vector<int> > Print(TreeNode* pRoot) { if(!pRoot) return v; bool even=false; queue<TreeNode*> que; que.push(pRoot); while(!que.empty()){ vector<int> ve; int s=que.size(); TreeNode* node=nullptr; for(int i=0;i<s;++i){ node=que.front(); que.pop(); ve.push_back(node->val); if(node->left) que.push(node->left); if(node->right) que.push(node->right); } if(even) reverse(ve.begin(),ve.end()); v.push_back(ve); even=!even; } return v; /*vector<vector<int>> res; if(!pRoot) return res; queue<TreeNode*> que; que.push(pRoot); bool even = false; while(!que.empty()){ vector<int> vec; const int size = que.size(); for(int i=0; i<size; ++i){ TreeNode* tmp = que.front(); que.pop(); vec.push_back(tmp->val); if(tmp->left != NULL) que.push(tmp->left); if(tmp->right != NULL) que.push(tmp->right); } if(even) std::reverse(vec.begin(), vec.end()); res.push_back(vec); even = !even; } return res; */ } };