Binary Tree Level Order Traversal

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},

  1. 3
  2. / \
  3. 9 20
  4. / \
  5. 15 7

return its level order traversal as:

  1. [
  2. [3],
  3. [9,20],
  4. [15,7]
  5. ]

解法一:递归

参考了Discussion中stellari的做法,递归进行层次遍历,并将每个level对应于相应的vector。

  1. /**
  2. * Definition for binary tree
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8. * };
  9. */
  10. class Solution
  11. {
  12. public:
  13. vector<vector<int> > result;
  14.  
  15. void levelTra(TreeNode *root, int level)
  16. {
  17. if(root == NULL)
  18. return;
  19. if(level == result.size())
  20. {
  21. vector<int> v;
  22. result.push_back(v);
  23. }
  24. result[level].push_back(root->val);
  25. levelTra(root->left, level+);
  26. levelTra(root->right, level+);
  27. }
  28.  
  29. vector<vector<int> > levelOrder(TreeNode *root)
  30. {
  31. levelTra(root, );
  32. return result;
  33. }
  34. };

解法二:

层次遍历,层数使用level来记录。同层装入同一个vector。

当进入新的一层时,将上层的vector保存,并清空。

  1. /**
  2. * Definition for binary tree
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8. * };
  9. */
  10.  
  11. struct Node
  12. {
  13. TreeNode* tNode;
  14. int level;
  15. Node(TreeNode* newtNode, int newlevel): tNode(newtNode), level(newlevel) {}
  16. };
  17.  
  18. class Solution {
  19. public:
  20. vector<vector<int> > levelOrder(TreeNode *root) {
  21. vector<vector<int> > ret;
  22. if(!root)
  23. return ret;
  24. // push root
  25. Node* rootNode = new Node(root, );
  26. queue<Node*> Nqueue;
  27. Nqueue.push(rootNode);
  28.  
  29. vector<int> cur;
  30. int curlevel = ;
  31. while(!Nqueue.empty())
  32. {
  33. Node* frontNode = Nqueue.front();
  34. Nqueue.pop();
  35.  
  36. if(frontNode->level > curlevel)
  37. {
  38. ret.push_back(cur);
  39. cur.clear();
  40. curlevel = frontNode->level;
  41. }
  42.  
  43. cur.push_back(frontNode->tNode->val);
  44.  
  45. if(frontNode->tNode->left)
  46. {
  47. Node* leftNode = new Node(frontNode->tNode->left, frontNode->level+);
  48. Nqueue.push(leftNode);
  49. }
  50. if(frontNode->tNode->right)
  51. {
  52. Node* rightNode = new Node(frontNode->tNode->right, frontNode->level+);
  53. Nqueue.push(rightNode);
  54. }
  55. }
  56. ret.push_back(cur);
  57. return ret;
  58. }
  59. };

【LeetCode】102. Binary Tree Level Order Traversal (2 solutions)的更多相关文章

  1. 【LeetCode】102. Binary Tree Level Order Traversal 二叉树的层序遍历 (Python&C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS DFS 日期 题目地址:https://lee ...

  2. 【LeetCode】102 - Binary Tree Level Order Traversal

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

  3. 【LeetCode】102. Binary Tree Level Order Traversal 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS BFS 日期 题目描述 Given a bi ...

  4. 【LeetCode】107. Binary Tree Level Order Traversal II (2 solutions)

    Binary Tree Level Order Traversal II Given a binary tree, return the bottom-up level order traversal ...

  5. 【一天一道LeetCode】#102. Binary Tree Level Order Traversal

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

  6. 【LeetCode】107. Binary Tree Level Order Traversal II 解题报告 (Python&C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:DFS 方法二:迭代 日期 [LeetCode ...

  7. 【LeetCode】107 - Binary Tree Level Order Traversal II

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

  8. 【一天一道LeetCode】#107. Binary Tree Level Order Traversal II

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

  9. 【leetcode】429. N-ary Tree Level Order Traversal

    problem 429. N-ary Tree Level Order Traversal solution1:Iteration /* // Definition for a Node. class ...

随机推荐

  1. 使用ScrapySharp快速从网页中采集数据

    ScrapySharp是一个帮助我们快速实现网页数据采集的库,它主要提供了如下两个功能 从Url获取Html数据 提供CSS选择器的方式解析Html节点 安装: ScrapySharp可以直接从Nug ...

  2. change kernel defconfig

    make -C kernel/goldfish O=/media/linux/1/touch/export/phablet-ubuntu-20130618/out/target/product/gen ...

  3. 百度王一男: DevOps 的前提是拆掉业务-开发-测试-运维中间的三面墙

    这是一个创建于 375 天前的主题,其中的信息可能已经有所发展或是发生改变. 由数人云.优维科技.中生代社区联合发起的 系列 Meetup < DevOps&SRE 超越传统运维之道&g ...

  4. mysql-connector-odbc-8.0.11-winx64.msi安装失败

    mysql-connector-odbc-8.0.11-winx64.msi安装失败 提示需要Redistributable for Visual Studio 2015 去下载 vc_redist. ...

  5. Android支付接入之Google In-app-Billing

    原文链接:http://www.mobile-open.com/2016/966337.html 因为公司需要接入Google的应用内支付(即Google的in-app Billing V3),接入过 ...

  6. Andorid之Annotation框架初使用(二)

    Fragment: @EActivity(R.layout.fragments) public class MyFragmentActivity extends FragmentActivity { ...

  7. 显示所有环境变量:env 或者 printenv

    显示所有环境变量:env 或者 printenv

  8. EF 不允许启动新事务,因为有其他线程正在该会话中运行。

    引起原因:在查询中提交了更改.如在遍历的时候,调用了savechanges(): 解决:把savechange()提到循环外.             IOrderedQueryable<TOH ...

  9. 网页采集(通过HtmlAgilityPack+XPath)

    有HtmlAgilityPack这个类库可以更方便地对HTML内容进行分析和提取.因此今天特别学习和实践了一下HtmlAgilityPack和XPath,并作下笔记. 1.下载HtmlAgilityP ...

  10. Android -- 动态添加布局

    在做项目的时候,遇到了scrollView与listView结合的使用,导致了滑动的混乱,但是有一个办法可以解决掉这个问题,就是手写listView的高度,还有另外一种方法,传送门:<Andro ...