【一天一道LeetCode】#103. Binary Tree Zigzag Level Order Traversal
来源:互联网 发布:希腊失业率数据 编辑:程序博客网 时间:2024/06/04 22:46
一天一道LeetCode
本系列文章已全部上传至我的github,地址:ZeeCoder‘s Github
欢迎大家关注我的新浪微博,我的新浪微博
欢迎转载,转载请注明出处
(一)题目
来源: https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
Given a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for >the next level and alternate between).
For example:
Given binary tree [3,9,20,null,null,15,7],3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:[
[3],
[20,9],
[15,7]
]
(二)解题
题目大意:给定一个二叉树,按层序遍历输出,层数从1开始,奇数层从左往右输出,偶数层从右往左输出。
解题思路:上一题【一天一道LeetCode】#102. Binary Tree Level Order Traversal采用queue的数据结构来层序输出,每层都是按从左往右的顺序输出,所以,这一题可以采用deque的数据结构,根据奇数和偶数层来判断输出顺序。
详细解释见代码:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>> ret; if(root==NULL) return ret; deque<TreeNode*> deq;//用来存放每一层的节点 deq.push_back(root);//将根节点放入queue等待处理 int n = 1;//记录层数 while(!deq.empty()) { vector<int> tempnode; deque<TreeNode*> temp;//存放下一层的节点 while(!deq.empty()){ if(n%2==1)//奇数层 { TreeNode* tn = deq.front();//从头开始取节点 tempnode.push_back(tn->val); deq.pop_front(); if(tn->left!=NULL) temp.push_back(tn->left);//从左往右放入节点 if(tn->right!=NULL) temp.push_back(tn->right); } else//偶数层 { TreeNode* tn = deq.back();//从尾部开始取节点 tempnode.push_back(tn->val); deq.pop_back(); if(tn->right!=NULL) temp.push_front(tn->right);//从右往左放入节点 if(tn->left!=NULL) temp.push_front(tn->left); } } deq = temp; ret.push_back(tempnode); n++;//处理下一层 } return ret; }};
- 【一天一道LeetCode】#103. Binary Tree Zigzag Level Order Traversal
- 【一天一道LeetCode】#102. Binary Tree Level Order Traversal
- 【一天一道LeetCode】#107. Binary Tree Level Order Traversal II
- LeetCode: Binary Tree Zigzag Level Order Traversal
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Zigzag Level Order Traversal
- [Leetcode] Binary Tree Zigzag Level Order Traversal
- Leetcode: Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Zigzag Level Order Traversal
- [LeetCode] Binary Tree Zigzag Level Order Traversal
- [Leetcode] Binary Tree Zigzag Level Order Traversal
- 【leetcode】Binary Tree Zigzag Level Order Traversal
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- [Leetcode]Binary Tree Zigzag Level Order Traversal
- [leetcode]Binary Tree Zigzag Level Order Traversal
- Leetcode: Binary Tree Zigzag Level Order Traversal
- LeetCode-Binary Tree Zigzag Level Order Traversal
- [leetcode] Binary Tree Zigzag Level Order Traversal
- ARC原理
- [LC238] Product of Array Except Self
- SAP ABAP ALV(LVC)的一个自定义事件(F4帮助事件,回车ENTER按钮事件)的一个实例
- eclipse 安装svn插件
- 获得浏览器User-agent的方法
- 【一天一道LeetCode】#103. Binary Tree Zigzag Level Order Traversal
- Android 用HorizontalScrollView实现滑动标签tabView
- jQuery.extend 函数详解
- 梯度下降总结
- Volley网络框架的简单使用
- Linux /bin, /sbin, /usr/bin, /usr/sbin 区别
- Linux下DNS服务器搭建详解
- Android之WebViewClient与WebChromeClient的区别
- 开发者和程序员需要关注的42个播客