把二叉树打印成多行

把二叉树打印成多行

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

和从上往下打印二叉树类似 ----> 传送门

两个栈来回倒

class Solution {
public:
        vector<vector<int> > Print(TreeNode* pRoot) {
            vector<vector<int>> ret;
            if (nullptr == pRoot) {
                return ret;
            }
            stack<TreeNode *> global;
            global.push(pRoot);
            bool isEnd = false;
            
            while (false == isEnd) {
                isEnd = true;
                stack<TreeNode *> local;
                vector<int> vt;
                while (!global.empty()) {
                    TreeNode *temp = global.top();
                    global.pop();
                    if (nullptr != temp) {
                        vt.push_back(temp->val);
                        local.push(temp->left);
                        local.push(temp->right);
                        if ((nullptr != temp->left) || (nullptr != temp->right)) {
                            isEnd = false;
                        }
                    }
                    else {
                        local.push(nullptr);
                        local.push(nullptr);
                    }
                }
                ret.push_back(vt);
                while(local.size()) {
                    global.push(local.top());
                    local.pop();
                }
            }
            return ret;
        }
};
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>> ret;
            if (nullptr == pRoot) {
                return ret;
            }
            queue<TreeNode *> myQueue;
            myQueue.push(pRoot);
            while(myQueue.size()) {
                int size = myQueue.size();
                vector<int> vt;
                
                while(size--) {
                    TreeNode *temp = myQueue.front();
                    myQueue.pop();
                    vt.push_back(temp->val);
                    
                    if (nullptr != temp->left)
                        myQueue.push(temp->left);
                    if (nullptr != temp->right)
                        myQueue.push(temp->right);
                }
                ret.push_back(vt);
            }
            return ret;
        }
    
};
posted @ 2019-03-10 13:26  张飘扬  阅读(163)  评论(0编辑  收藏  举报