LeetCodeDay45 —— 二叉树的锯齿形层次遍历★☆

103. 二叉树的锯齿形层次遍历

  • 给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
示例
  给定二叉树 [3,9,20,null,null,15,7],
      3
    / \
    9  20
      /  \
    15   7
  返回锯齿形层次遍历如下:
    [
      [3],
      [20,9],
      [15,7]
    ]
思路
  1. 利用队列实现层次遍历,bool变量标识是否需要反转。
  2. 注意不需要使用两个队列来标记‘层’的信息,每次遍历时直接取出该层元素个数即可。
class Solution {
 public:
  vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
    if (!root) return {};
    bool needSwitch = false;
    vector<vector<int>> ret;
    queue<TreeNode*> mQue;
    mQue.push(root);
    while (!mQue.empty()) {
      int size = mQue.size();
      vector<int> level;
      while (size--) {
        TreeNode* node = mQue.front();
        mQue.pop();
        level.push_back(node->val);
        if (node->left) mQue.push(node->left);
        if (node->right) mQue.push(node->right);
      }
      if (needSwitch) {
        ret.push_back(vector<int>(level.rbegin(), level.rend()));
      } else {
        ret.push_back(level);
      }
      needSwitch = !needSwitch;
    }
    return ret;
  }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 数据结构第12讲 二叉树的层次遍历 二叉树的遍历一般有先序遍历、中序遍历和后序遍历,这三种遍历比较简单。今天我们讲...
    rainchxy阅读 9,036评论 0 1
  • 三道层次遍历题,同一个模板,这边用到的是两个队列 二叉树的层次遍历 LeetCode题目地址 二叉树的层次遍历 加...
    只为此心无垠阅读 1,886评论 0 0
  • 在你面前,我想要变得坚强。
    葡萄提子阅读 1,148评论 0 0
  • 这段时间,一直在梳理工作上的那些事,其中的一项就是设计和申请商标,顺便也学习了一下相关的知识。商标的命名也是一门学...
    tangertan阅读 3,443评论 0 1
  • 我非本我,即我不是原来的我,人的一生在不断变化,我的思想,你的近况,后一刻的我永远不会再有前一刻的我。但是呢,我是...
    我愚我在阅读 1,378评论 0 0

友情链接更多精彩内容