zoukankan      html  css  js  c++  java
  • 把二叉树打印成多行

    把二叉树打印成多行

    题目描述

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

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

    两个栈来回倒

    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;
            }
        
    };
    
  • 相关阅读:
    Servlet学习之http
    初识JDBC-篇四
    初识JDBC-篇三
    正则表达式简单应用3
    正则表达式简单应用2
    正则表达式简单应用1
    反射的简单应用三
    反射的简单应用2
    反射简单的应用
    TCP协议应用--上传文件
  • 原文地址:https://www.cnblogs.com/hesper/p/10505030.html
Copyright © 2011-2022 走看看