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

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

题目描述

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

思路

这道题和之前的层序遍历特别相似,简直就是题目的翻版,本着轮子不用重复造的想法,直接把代码复制过来修改;

如果直接修改就很简单了,先按照层序遍历的思路,得到一个二维数组,然后对此数组每隔一个位置逆序一次即可;

层序遍历的思路可以我的这道题的思路:

https://www.cnblogs.com/sakurapiggy/p/13201491.html

代码

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
typedef vector<int> vecint;
typedef vector<vecint> v2ecint;
class Solution {
public:
        int maxDeep;
        v2ecint ans;
        void dfs(TreeNode* node, int deep) {
            if (!node) {
                return;
            }
            if (deep == maxDeep) {
                vecint vec;
                vec.push_back(node->val);
                ans.push_back(vec);
                ++maxDeep;
            } else {
                ans[deep].push_back(node->val);
            }
                
            dfs(node->left, deep+1);
            dfs(node->right, deep+1);
        }
        vector<vector<int> > Print(TreeNode* pRoot) {
            maxDeep = 0;
            dfs(pRoot, 0);
            bool flag = false;
            for (vecint &v:ans) {
                if (flag) {
                    flag = false;
                    reverse(v.begin(), v.end());
                } else {
                    flag = true;
                }
         
            }
            return this->ans;
        }
    
};
原文地址:https://www.cnblogs.com/sakurapiggy/p/13258021.html