码迷,mamicode.com
首页 > 其他好文 > 详细

把二叉树打印成多行

时间:2019-03-10 13:54:50      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:描述   val   class   http   roo   tac   队列   htm   lob   

把二叉树打印成多行

题目描述

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

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

两个栈来回倒

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;
        }
    
};

把二叉树打印成多行

标签:描述   val   class   http   roo   tac   队列   htm   lob   

原文地址:https://www.cnblogs.com/hesper/p/10505030.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!