- 题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
- 思路:
- 每一层的节点先看左节点有没有,再看右节点有没有,最后从左到右得到了这一层的节点
- 启发或者坑:
- 之字形打印,别忘记啦hh
- 代码:
/* 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<TreeNode*> lineNode; vector<TreeNode*> childNode; vector<int> line; vector<vector<int>> res; if (!pRoot) return res; lineNode.push_back(pRoot); int lineNum = 1; while (!lineNode.empty()) { line.clear(); childNode.clear(); for (int i = 0; i < lineNode.size(); i++){ line.push_back(lineNode[i]->val); if (lineNode[i]->left) childNode.push_back(lineNode[i]->left); if (lineNode[i]->right) childNode.push_back(lineNode[i]->right); } if (lineNum%2) res.push_back(line); else { for (int i = 0; i < line.size()/2; i++) { swap(line[i], line[line.size()-1-i]); } res.push_back(line); } lineNum++; lineNode.assign(childNode.begin(), childNode.end()); } return res; } };
剑指offer 53.按之字形顺序打印二叉树
猜你喜欢
转载自blog.csdn.net/Alexia23/article/details/104093719
今日推荐
周排行