剑指offer系列49:把二叉树打印成多行

Posted neverland0718

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指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;
    

;

 

以上是关于剑指offer系列49:把二叉树打印成多行的主要内容,如果未能解决你的问题,请参考以下文章

剑指OFFER 把二叉树打印成多行

剑指offer---把二叉树打印成多行

剑指offer 60. 把二叉树打印成多行

剑指offer——把二叉树打印成多行

剑指offer——把二叉树打印成多行

剑指Offer——把二叉树打印成多行