class Solution { public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int> > result; if (pRoot == NULL) return result; queue<TreeNode*> q; q.push(pRoot); int flag = -1;// flag=1表示从左向右,flag=1表示从右向左 while (!q.empty()) { //把q中的元素都pop出来 vector<int> res; vector<TreeNode*> cur; while (!q.empty()) { res.push_back(q.front()->val); cur.push_back(q.front()); q.pop(); } result.push_back(res); for (int i = cur.size() - 1; i >= 0; i--) { TreeNode* curNode = cur[i]; if (flag == 1) { if(curNode->left) q.push(curNode->left); if(curNode->right) q.push(curNode->right); } else //flag==1 { if (curNode->right) q.push(curNode->right); if (curNode->left) q.push(curNode->left); } } flag = -flag; } return result; } };
用一个队列和一个数组
队列:flag==1,先将左孩子push进去,再将右孩子push进去
数组:每次都是从 尾向前 遍历数组