【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 ...
随机推荐
- 【AngularJS】—— 7 模块化
AngularJS有几大特性,比如: 1 MVC 2 模块化 3 指令系统 4 双向数据绑定 那么本篇就来看看AngularJS的模块化. 首先先说一下为什么要实现模块化: 1 增加了模块的可重用性 ...
- 使用基于关系的选择器和伪类选择器创建纯CSS无JavaScript的鼠标移动到上面即可显示的下拉菜单
html代码: <div class="menu-bar"> <ul> <li> <h3 class="text-warning ...
- 小明系列问题――小明序列(LIS)
小明系列问题――小明序列 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- Hadoop之Storm其他_pom
1.pom 配置 <dependency> <groupId>org.apache.storm</groupId> <artifactId>storm- ...
- WPF:依赖属性的应用
依赖属性与一般属性相比,提供了对资源引用.样式.动画.数据绑定.属性值继承.元数据重载以及WPF设计器的继承支持功能的支持. 下面的这个Demo来自<葵花宝典--WPF自学手册>. 1.M ...
- php 通过curl post发送json数据实例
例1 代码如下 复制代码 $data = array("name" => "Hagrid", "age" => "3 ...
- 巧用jQuery选择器写表单办法总结(提高效率)
转载自:http://blog.csdn.net/violetjack0808/article/details/52221343 1.文本和文本框 <!DOCTYPE html> < ...
- [TimusOJ1057]Amount of Degrees
[TimusOJ1057]Amount of Degrees 试题描述 Create a code to determine the amount of integers, lying in the ...
- ios中二维码的使用之二: 二维码的扫描
二维码的扫描: 1,导入支持框架,<AVFoundation/AVFoundation.h> 2 ,扫描:
- 160809228_符瑞艺_C语言程序设计实验3 循环结构程序设计
#include <stdio.h> int main(){ //使用for循环完成1+2+......+100 ; ;i<=;i++) sum +=i; //sum = sum ...