zoukankan      html  css  js  c++  java
  • 剑指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;
            }
        
    };
    
  • 相关阅读:
    CSS清浮动
    深入理解BFC
    深入理解CSS浮动
    CSS颜色模式转换器的实现
    深入理解CSS背景
    理解CSS前景色和透明度
    深入理解CSS六种颜色模式
    HTML学习目录
    深入理解display属性
    深入理解盒模型
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13258021.html
Copyright © 2011-2022 走看看