zoukankan      html  css  js  c++  java
  • 剑指offer系列49:把二叉树打印成多行

    有了上一个之字形打印二叉树,这个题就比较简单了。

    首先分析这道题的结构,一行一行的输出。

    1.如果第一行顺序存储,也就是先存左边在存右边。那么输出的时候也要同样的先左边后右边的顺序。这就是先进先出,所以用队列。

    2.如果不顺序存,使用栈来存。第二行就先右边在左边,必须这样第一行输出的时候才可以先左后右。存第三行是根据第二行的弹出顺序决定的。因为第二行的弹出顺序是从左向右,所以第三行的第一个元素必须是第二行左边元素的子树。也就是在栈底。也就是说第三行开始的元素放在栈底只能最后输出,这样必然是不对的。

    class Solution {
    public:
        vector<vector<int> > Print(TreeNode* pRoot) {
            vector<vector<int> > re;
            if (pRoot == NULL)
                return re;
            deque<TreeNode*> st[2];
    
            vector<int> aux;
    
            int cur = 0;
            int next = 1;
            st[cur].push_front(pRoot);
            while (!st[0].empty()|| !st[1].empty())
            {
                TreeNode *pnode = st[cur].front();
                st[cur].pop_front();//从队列前面出
                aux.push_back(pnode->val);
                
                //要求输出:左-》右
                if (pnode->left)
                    st[next].push_back(pnode->left);//从队列后面进
                if (pnode->right)
                    st[next].push_back(pnode->right);//从队列后面进
    
                if (st[cur].empty())//一行全部输出
                {
                    re.push_back(aux);
                    aux.clear();
                    cur = 1 - cur;
                    next = 1 - next;
                }
            }
            return re;
        }
    
    };
  • 相关阅读:
    MYbatis调试日记(三)
    Mybatis错误调试(二)
    【转载】MyBatis之传入参数
    Mybatis代码调试问题总结(一)
    【转载】Mybatis多参数查询映射
    未整理的资源
    Strace--系统调用分析问题集锦
    java初始化过程中成员变量
    java三元表达式编程规范问题
    转:Java的一道面试题----静态变量初始化过程
  • 原文地址:https://www.cnblogs.com/neverland0718/p/11254397.html
Copyright © 2011-2022 走看看