【leetcode】Binary Tree Zigzag Level Order Traversal (middle)
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,#,#,15,7},
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]
思路:由于需要排成之字形,所以用一个栈来存储当前行的内容,另一个栈来存储下一行的内容。
以根为第0层,那么偶数层都应该从左向右输出。那么每次遇到偶数层,压入下一层奇数层时就按从左到右的顺序,这样弹栈时就是从右到左。
纠结了一会儿,AC了。
class Solution {
public:
vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
vector<vector<int>> ans;
if(root == NULL)
{
return ans;
}
int level = ; //记录当前层号
vector<TreeNode *> curlevel;
curlevel.push_back(root);
while(!curlevel.empty())
{
vector<int> partans;
vector<TreeNode *> nextlevel;
if(level % == ) //偶数层,根是第0层
{
while(!curlevel.empty()) //本层不为空
{
if(curlevel.back()->left != NULL) //先压入左边,再压入右边
{
nextlevel.push_back(curlevel.back()->left);
}
if(curlevel.back()->right != NULL)
{
nextlevel.push_back(curlevel.back()->right);
}
partans.push_back(curlevel.back()->val);
curlevel.pop_back();
}
ans.push_back(partans);
curlevel = nextlevel;
}
else
{
while(!curlevel.empty()) //本层不为空
{
if(curlevel.back()->right != NULL) //先压入右边,再压入左边
{
nextlevel.push_back(curlevel.back()->right);
}
if(curlevel.back()->left != NULL)
{
nextlevel.push_back(curlevel.back()->left);
}
partans.push_back(curlevel.back()->val);
curlevel.pop_back();
}
ans.push_back(partans);
curlevel = nextlevel;
}
level++;
}
return ans;
}
void createTree(TreeNode * &root)
{
int n;
cin >> n;
if(n != )
{
root = new TreeNode(n);
createTree(root->left);
createTree(root->right);
}
}
};
看看别人的答案。思路不一样。
class Solution {
vector<vector<int> > result;
public:
vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
if(root!=NULL)
{
traverse(root, );
}
for(int i=;i<result.size();i+=)
{
vector<int>* v = &result[i];
std:reverse(v->begin(), v->end());
}
return result;
}
void traverse(TreeNode* node, int level)
{
if(node == NULL) return;
vector<int>* row = getRow(level);
row->push_back(node->val);
traverse(node->left, level+);
traverse(node->right, level+);
}
vector<int>* getRow(int level)
{
if(result.size()<=level)
{
vector<int> newRow;
result.push_back(newRow);
}
return &result[level];
}
};
【leetcode】Binary Tree Zigzag Level Order Traversal (middle)的更多相关文章
- 【LeetCode】 Binary Tree Zigzag Level Order Traversal 解题报告
Binary Tree Zigzag Level Order Traversal [LeetCode] https://leetcode.com/problems/binary-tree-zigzag ...
- 【leetcode】Binary Tree Zigzag Level Order Traversal
Binary Tree Zigzag Level Order Traversal Given a binary tree, return the zigzag level order traversa ...
- 【Leetcode】【Medium】Binary Tree Zigzag Level Order Traversal
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- 【树】Binary Tree Zigzag Level Order Traversal
题目: Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from lef ...
- leetCode 103.Binary Tree Zigzag Level Order Traversal (二叉树Z字形水平序) 解题思路和方法
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- [LeetCode] 103. Binary Tree Zigzag Level Order Traversal 二叉树的之字形层序遍历
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- leetcode 103 Binary Tree Zigzag Level Order Traversal ----- java
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- [leetcode]103. Binary Tree Zigzag Level Order Traversal二叉树来回遍历
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- [LeetCode] 103. Binary Tree Zigzag Level Order Traversal _ Medium tag: BFS
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
随机推荐
- 看开源代码利器—用Graphviz + CodeViz生成C/C++函数调用图(call graph)
一.Graphviz + CodeViz简单介绍 CodeViz是<Understanding The Linux Virtual Memory Manager>的作者 Mel Gorma ...
- 密码学初级教程(三)公钥密码RSA
密码学家工具箱中的6个重要的工具: 对称密码 公钥密码 单向散列函数 消息认证码 数字签名 伪随机数生成器 公钥密码(非对称密码) 问题: 公钥认证问题 处理速度是对称密码的几百分之一 求离散对数非常 ...
- Max Degree of Parallelism最大并行度配置
由于公司的业务在急速增长中,发现数据库服务器已经基本撑不住这么多并发.一方面,要求开发人员调整并发架构,利用缓存减少查询.一方面从数据库方面改善并发.数据库的并行度可设置如下: 1)cost thre ...
- 删除某一BSC在某一时间段内的数据
DELETE FROM cdl_raw_do_12501_ztev8_sht_201509 WHERE call_start_time >= STR_TO_DATE( '2015-09-14 2 ...
- nyoj 14 会场安排问题(贪心专题)
会场安排问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工 ...
- 【C语言入门教程】4.1 一维数组
数组与指针涉及到数据在内存中的存储位置问题,数组由连续的存储单元组成,最低地址对应于数组的第一个单元,最高地址对应于数组的最后一个单元.指针是一种特殊的变量,该变量所存放的是内存地址,通过指针变量可访 ...
- maven 工程启动找不到 Spring ContextLoaderListener 的解决办法
1.错误: Error configuring application listener of class org.springframework.web.context.ContextLoader ...
- Android应用性能优化
整理自http://androidperformance.com的几篇博客 代码内存优化-Java篇 避免创建不必须的对象,虽然GC可以回收不用的对象,但为对象分配内存和回收它们同样是需要消耗资源的. ...
- windows7 + cocos2d-x 3.2 +vs2012 速度真的很慢
每次编译要大半天,简直伤不起,这样效率如何上的去???有谁有办法?
- [codeforces 339]D. Xenia and Bit Operations
[codeforces 339]D. Xenia and Bit Operations 试题描述 Xenia the beginner programmer has a sequence a, con ...