zoukankan      html  css  js  c++  java
  • Leetcode 103. 二叉树的锯齿形层序遍历

    地址 https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/

    给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
    
    例如:
    给定二叉树 [3,9,20,null,null,15,7],
    
        3
       / 
      9  20
        /  
       15   7
    返回锯齿形层序遍历如下:
    
    [
      [3],
      [20,9],
      [15,7]
    ]
    

    解答
    这题在剑指Offer中也有讲过
    树的dfs是一层层的遍历
    所以我们在遍历的过程中查看有没属于当前层级的记录vector
    如果没有就是答案最多记录到上层节点就没开启多的空间
    那么我们多push_back一个vector即可
    如果已经有了当前层的vector 我们直接push_back当前节点数值即可

    至于锯齿型遍历的要求 就是奇数层背向插入数值,偶数层正向插入数值
    可以在插入的时候就处理
    也可以全部遍历结束后,逐层处理答案(奇数层翻转)

    class Solution {
    public:
        vector<vector<int>> ans;
        void dfs(TreeNode* root,int level){
            if(root==NULL) return;
            
            if(ans.size()<=level){
                vector<int> v;
                ans.push_back(v);
            }
            vector<int>& v = ans[level];
            if(level%2==1){
                v.insert(v.begin(),root->val);
            }else{
                v.push_back(root->val);
            }
            dfs(root->left,level+1);
            dfs(root->right,level+1);
        }
        vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
            dfs(root,0);
            return ans;
        }
    };
    

    我的视频题解空间

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    R语言学习——数据框
    R语言学习——数组
    R语言学习——矩阵
    R语言学习——向量
    SSM的项目结构
    simple-spring-memcached简介
    Arrays
    AbstractCollection 类
    Collections 类
    Map接口
  • 原文地址:https://www.cnblogs.com/itdef/p/14817527.html
Copyright © 2011-2022 走看看