剑指Offer——按之字形顺序打印二叉树

题目描述:

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。


分析:

我们都知道二叉树的层次遍历用的是队列。

但是这个的子树的结点是先进后出的,所以我们使用栈更加方便。

而且为了方便,我用了两个栈,因为不是每一次都是先进左子树再进右子树的。


代码:

 1 /*
 2 struct TreeNode {
 3     int val;
 4     struct TreeNode *left;
 5     struct TreeNode *right;
 6     TreeNode(int x) :
 7             val(x), left(NULL), right(NULL) {
 8     }
 9 };
10 */
11 class Solution {
12 public:
13     vector<vector<int> > Print(TreeNode* pRoot) {
14         vector<vector<int> > res;
15         if(pRoot == NULL) return res;
16         stack<TreeNode*> s1, s2;
17         s1.push(pRoot);
18         while(1) {
19             vector<int> v1;
20             while(!s1.empty()) {
21                 TreeNode* top = s1.top();
22                 v1.push_back(top->val);
23                 if(top->left) s2.push(top->left);
24                 if(top->right) s2.push(top->right);
25                 s1.pop();
26             }
27             res.push_back(v1);
28             if(s2.empty()) break;
29             vector<int> v2;
30             while(!s2.empty()) {
31                 TreeNode* top = s2.top();
32                 v2.push_back(top->val);
33                 if(top->right) s1.push(top->right);
34                 if(top->left) s1.push(top->left);
35                 s2.pop();
36             }
37             res.push_back(v2);
38             if(s1.empty()) break;
39         }
40         return res;
41     }
42 };
原文地址:https://www.cnblogs.com/jacen789/p/7747803.html