1. 程式人生 > >把二叉樹打印成多行

把二叉樹打印成多行

== des right tmp itl 題目 存儲 pre while

題目描述

從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 解題思路: 這個題目跟打印“之”字形想法類似,不過這裏使用的是兩個隊列,循環存儲每層的節點。
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;
        }
};

  

把二叉樹打印成多行