博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
力扣网 | 每日打卡题 | 103. 二叉树的锯齿形层序遍历
阅读量:4140 次
发布时间:2019-05-25

本文共 2099 字,大约阅读时间需要 6 分钟。

文章目录

题目

解析

层次遍历——翻转记录数组

  • 用levelsize记录每层的节点数;
  • 用vtmp正常遍历顺序记录每层节点;
  • 用flag记录单双层,用于翻转vtmp;
    在这里插入图片描述
/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; *///[1,2,3,4,null,null,5]//[3,9,20,null,null,15,7]class Solution {
public: vector
> zigzagLevelOrder(TreeNode* root) {
vector
> res; if(root==nullptr)return res; queue
q; q.push(root); int levelsize=q.size();//记录当前层的节点数量 int flag=false; while(!q.empty()){
//遍历当前层所有节点 vector
vtmp; while(levelsize--){ TreeNode* ttmp=q.front(); q.pop(); vtmp.push_back(ttmp->val); if(ttmp->left!=nullptr)q.push(ttmp->left); if(ttmp->right!=nullptr)q.push(ttmp->right); } if(flag)reverse(vtmp.begin(),vtmp.end()); res.push_back(vtmp); flag=~flag; levelsize=q.size(); } return res; }};

官方解答——双向队列deque

  • 用isOrderLeft记录单双层
  • 通过isOrderLeft判断节点添加到levelList的左边还是右边
class Solution {
public: vector
> zigzagLevelOrder(TreeNode* root) {
vector
> ans; if (!root) {
return ans; } queue
nodeQueue; nodeQueue.push(root); bool isOrderLeft = true; while (!nodeQueue.empty()) {
deque
levelList; int size = nodeQueue.size(); for (int i = 0; i < size; ++i) { auto node = nodeQueue.front(); nodeQueue.pop(); if (isOrderLeft) { levelList.push_back(node->val); } else { levelList.push_front(node->val); } if (node->left) { nodeQueue.push(node->left); } if (node->right) { nodeQueue.push(node->right); } } ans.emplace_back(vector
{ levelList.begin(), levelList.end()}); isOrderLeft = !isOrderLeft; } return ans; }};/*作者:LeetCode-Solution链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/solution/er-cha-shu-de-ju-chi-xing-ceng-xu-bian-l-qsun/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/
你可能感兴趣的文章
文件隐藏
查看>>
两个linux内核rootkit--之二:adore-ng
查看>>
两个linux内核rootkit--之一:enyelkm
查看>>
关于linux栈的一个深层次的问题
查看>>
rootkit related
查看>>
关联容器map的下标操作(特殊)---map的本质就是关联数组, 数组的本质就是映射!
查看>>
我赞同Bob Quinn和Dave Shute的说法: WinSock中的SO_REUSEADDR就是个鸡肋, 最好不用它
查看>>
为什么TCP服务端需要调用bind函数而客户端通常不需要呢?
查看>>
什么是socket的name? 怎样给socket取一个name? --- 以生宝宝并取名的过程再谈socket、name、bind和socket name
查看>>
如何偷窥到socket对应的内核缓冲区中有什么数据? 有多少数据?---利用recv的MSG_PEEK和ioctlsocket的FIONREAD
查看>>
《Windows Sockets 网络编程》. Bob Quinn & Dave Shuttle (非常实用的Windows编程书籍)
查看>>
为什么有时ping不通www.baidu.com但可以访问www.baidu.com网页?
查看>>
从telnet www.baidu.com 80 聊聊我经历过的tcp“三次握手”失败---顺便验证telnet是基于tcp协议的
查看>>
C++智能指针auto_ptr源码完全解析---以微软auto_ptr为例来探讨auto_ptr的用法
查看>>
我修改的问题单居然回归不通过?---趣闻二则
查看>>
模拟linux的shell---顺便复习一下fork,execlp和waitpid函数
查看>>
如何获取linux shell中ls进程的进程号?---有趣的问题!
查看>>
利用thread来简要模拟signal函数功能
查看>>
linux shell “永久环境变量”、“临时环境变量”和“普通变量“之完全解读
查看>>
AlphaGo 4:1 李世石
查看>>