把二叉树打印成多行
题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
解题思路:
这个题目跟打印“之”字形想法类似,不过这里使用的是两个队列,循环存储每层的节点。
class Solution { public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int> > res; if(pRoot == NULL) return res; queue<TreeNode *> que1, que2; que1.push(pRoot); res.push_back(vector<int>(1, pRoot->val)); TreeNode* tmpNode=NULL; while(!que1.empty() || !que2.empty()){ vector<int>tmpVct; while(!que1.empty()){ tmpNode = que1.front(); que1.pop(); if(tmpNode->left != NULL){ que2.push(tmpNode->left); tmpVct.push_back(tmpNode->left->val); } if(tmpNode->right != NULL){ que2.push(tmpNode->right); tmpVct.push_back(tmpNode->right->val); } } if(tmpVct.size() != 0) res.push_back(tmpVct); tmpVct.clear(); while(!que2.empty()){ tmpNode = que2.front(); que2.pop(); if(tmpNode->left != NULL){ que1.push(tmpNode->left); tmpVct.push_back(tmpNode->left->val); } if(tmpNode->right != NULL){ que1.push(tmpNode->right); tmpVct.push_back(tmpNode->right->val); } } if(tmpVct.size() != 0) res.push_back(tmpVct); } return res; } };
学学学 练练练 刷刷刷