把二叉树打印成多行

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
 
解题思路:
这个题目跟打印“之”字形想法类似,不过这里使用的是两个队列,循环存储每层的节点。
 
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;
        }
};

  

posted @ 2019-04-13 16:19  tcgoshawk  阅读(128)  评论(0编辑  收藏  举报