• 剑指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;
            }
        
    };
    
  • 相关阅读:
    [状压DP][二分]JZOJ 3521 道路覆盖
    字符串操作
    练习: 判断一个数是否为小数
    Python 深浅拷贝
    编码
    python中的 == 和 is 的区别
    Python3 字典的增删改查
    Python3 列表的基本操作
    初识 Python
    方法的入门
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13258021.html
Copyright © 2020-2023  润新知