题解 | #按之字形顺序打印二叉树# C++
按之字形顺序打印二叉树
http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int> > result; if (pRoot == nullptr) return result; typedef deque<TreeNode*> Deque; typedef pair<int, Deque> Pair; typedef queue<Pair> Queue; Queue notes; Deque rootD; rootD.push_back(pRoot); notes.push(Pair(1, rootD ) ); while (!notes.empty()) { // 记录每层的值 vector<int> numLayer; // 记录每层的节点 Deque nodeLayer; Pair tmp = notes.front(); notes.pop(); int layerth = tmp.first; size_t length = tmp.second.size(); if (length == 0) break; // 奇数层,从左往右 if (layerth % 2 == 1) { for (int i = 0; i < length; i++) { TreeNode* tmpNode = tmp.second.back(); tmp.second.pop_back(); if (tmpNode->left != nullptr) nodeLayer.push_back(tmpNode->left); if (tmpNode->right != nullptr) nodeLayer.push_back(tmpNode->right); numLayer.push_back(tmpNode->val); } } // 偶数层,从右往左 else if (layerth % 2 == 0) { for (int i = 0; i < length; i++) { TreeNode* tmpNode = tmp.second.back(); tmp.second.pop_back(); if (tmpNode->right != nullptr) nodeLayer.push_back(tmpNode->right); if (tmpNode->left != nullptr) nodeLayer.push_back(tmpNode->left); numLayer.push_back(tmpNode->val); } } notes.push(Pair(layerth+1, nodeLayer)); result.push_back(numLayer); } return result; } };