Title:

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3
/ \
9 20
/ \
15 7

return its level order traversal as:

[
[3],
[9,20],
[15,7]
] 思路:使用队列,并且每次记录下每层的数目,这样从队列中取元素也就清楚了每层的元素
/**
* 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>> levelOrder(TreeNode* root) {
queue<TreeNode*> Q;
vector<vector<int> > results;
if (!root)
return results;
vector<int> result;
Q.push(root);
int count_pre = ;
int count_cur = ;
while (!Q.empty()){
TreeNode* top = Q.front();
result.push_back(top->val);
Q.pop();
count_pre--;
if (top->left){
Q.push(top->left);
count_cur++;
}
if (top->right){
Q.push(top->right);
count_cur++;
}
if (count_pre == ){
count_pre = count_cur;
count_cur = ;
results.push_back(result);
result.clear();
}
}
return results;
}
};

还可以使用递归。关键是要保存到对应的层数

/**
* 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>> levelOrder(TreeNode* root) {
vector<vector<int> > result;
travel(root,result,);
return result;
}
void travel(TreeNode* root,vector<vector<int> > &result,int level){
if (!root)
return ;
if (level > result.size())
result.push_back(vector<int> ());
result[level-].push_back(root->val);
travel(root->left,result,level+);
travel(root->right,result,level+);
}
};

Title:

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]
]
一样的思路啊!如果不使用递归,则使用一个标记,看这层是否反转,直接使用reverse函数即可。如果使用递归,则也是在相应的层反转。但是因为是在插入的过程中,所以应该是插入每层的vector头。
/**
* 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> > results;
if (!root)
return results;
queue<TreeNode*> Q;
Q.push(root);
int count_pre = ;
int count_cur = ;
vector<int> result;
bool flag = false;
while (!Q.empty()){
TreeNode* node = Q.front();
Q.pop();
result.push_back(node->val);
count_pre--;
if (node->left){
Q.push(node->left);
count_cur++;
}
if (node->right){
Q.push(node->right);
count_cur++;
}
if (count_pre == ){
count_pre = count_cur;
count_cur = ;
if (flag){
reverse(result.begin(),result.end());
results.push_back(result);
}else{
results.push_back(result);
}
result.clear();
flag = !flag;
}
}
return results;
}
};
/**
* 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> > results;
travel(root,,results,true);
return results;
}
void travel(TreeNode* root, int level, vector<vector<int> > &results, bool left_to_right){
if (!root)
return;
if (level > results.size())
results.push_back(vector<int>());
if (left_to_right)
results[level-].push_back(root->val);
else
results[level-].insert(results[level-].begin(),root->val);
travel(root->left,level+,results,!left_to_right);
travel(root->right,level+,results,!left_to_right);
}
};

LeetCode: Binary Tree Level Order Traversal && Binary Tree Zigzag Level Order Traversal的更多相关文章

  1. [LeetCode] Binary Tree Zigzag Level Order Traversal 二叉树的之字形层序遍历

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...

  2. [LeetCode]题解(python):103 Binary Tree Zigzag Level Order Traversal

    题目来源 https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/ Given a binary tree, re ...

  3. 【一天一道LeetCode】#103. Binary Tree Zigzag Level Order Traversal

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 来源: htt ...

  4. [leetcode]Binary Tree Zigzag Level Order Traversal @ Python

    原题地址:http://oj.leetcode.com/problems/binary-tree-zigzag-level-order-traversal/ 题意: Given a binary tr ...

  5. 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 ...

  6. leetCode :103. Binary Tree Zigzag Level Order Traversal (swift) 二叉树Z字形层次遍历

    // 103. Binary Tree Zigzag Level Order Traversal // https://leetcode.com/problems/binary-tree-zigzag ...

  7. [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 ...

  8. LeetCode 103. 二叉树的锯齿形层次遍历(Binary Tree Zigzag Level Order Traversal)

    103. 二叉树的锯齿形层次遍历 103. Binary Tree Zigzag Level Order Traversal 题目描述 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再 ...

  9. 【LeetCode】 Binary Tree Zigzag Level Order Traversal 解题报告

    Binary Tree Zigzag Level Order Traversal [LeetCode] https://leetcode.com/problems/binary-tree-zigzag ...

  10. Binary Tree Zigzag Level Order Traversal [LeetCode]

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...

随机推荐

  1. [转载]C#中的WebBrowser控件的使用

    http://www.cnblogs.com/txw1958/archive/2012/09/24/CSharp-WebBrowser.html

  2. [转载]C#获取进程的主窗口句柄

    public class User32API { private static Hashtable processWnd = null; public delegate bool WNDENUMPRO ...

  3. 用matlab查找txt文档中的关键字,并把关键字后面的数据存到起来用matlab处理

    用matlab查找txt文档中的关键字,并把关键字后面的数据存到起来用matlab处理 我测了一组数据存到txt文件中,是个WIFI信号强度文档,里面有我们需要得到的数据,有没用的数据,想用matla ...

  4. Java学习第一篇:变量,数据类型,运算符,流程控制(简介)

    一.安装和配置jdk 1.jdk是什么? (1).jdk全称是Java Development Kit, Java开发工具包; (2).jdk是sun公司开发的; (3).jdk主要包括:jre(Ja ...

  5. mysql_fetch_row,mysql_fetch_array,mysql_fetch_object,mysql_fetch_assoc区别

    1.mysql_fetch_row  只能以索引下标取值,从0开始. 2.mysql_fetch_array 能以索引下标取值,也可以用字段名称取值. 3.mysql_fetch_object 对象方 ...

  6. Appium绑定

    锁定 锁定屏幕 # python driver.lock(5) 将 app 置于后台 把当前应用放到后台去 # python driver.background_app(5) 收起键盘 收起键盘 # ...

  7. Zookeeper安装部署

    Zookeeper安装 1. 安装 wget http://www.apache.org/dist//zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz ...

  8. Dropbox 有哪些鲜为人知的使用技巧?

    作者:Feeng链接:http://www.zhihu.com/question/20104959/answer/13991578来源:知乎著作权归作者所有,转载请联系作者获得授权. 原文:The B ...

  9. 254. Factor Combinations

    题目: Numbers can be regarded as product of its factors. For example, 8 = 2 x 2 x 2; = 2 x 4. Write a ...

  10. NSDictionary 初始化

    NSDictionary *dic1=[NSDictionary dictionaryWithObject:@"1" forKey:@"a"];         ...