剑指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:把二叉树打印成多行的主要内容,如果未能解决你的问题,请参考以下文章