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

层序遍历,既可以用dfs实现也可以用bfs实现,用bfs实现的时候应该借助队列,代码如下:

dfs:

  1. class Solution {
  2. public:
  3. vector<vector<int>> levelOrder(TreeNode* root) {
  4. dfs(root, );
  5. return ret;
  6. }
  7. void dfs(TreeNode * root, int dep)
  8. {
  9. if(!root) return;
  10. if(dep < ret.size()){
  11. ret[dep].push_back(root->val);
  12. }else{
  13. vector<int> tmp;
  14. tmp.push_back(root->val);
  15. ret.push_back(tmp);
  16. }
  17. dfs(root->left, dep+);
  18. dfs(root->right, dep+);
  19. }
  20. private:
  21. vector<vector<int>> ret;
  22. };

bfs:

  1. class Solution {
  2. private:
  3. struct Node{
  4. TreeNode * treeNode;
  5. int level;
  6. Node(){}
  7. Node(TreeNode * node, int lv)
  8. :treeNode(node), level(lv){}
  9. };
  10. public:
  11. vector<vector<int>> levelOrder(TreeNode* root) {
  12. queue<Node> nodeQueue;
  13. vector<vector<int>> ret;
  14. if(root == NULL)
  15. return ret;
  16. nodeQueue.push(Node(root, ));
  17. int dep = -;
  18. while(!nodeQueue.empty()){
  19. Node node = nodeQueue.front();
  20. if(node.treeNode->left)
  21. nodeQueue.push(Node(node.treeNode->left, node.level + ));
  22. if(node.treeNode->right)
  23. nodeQueue.push(Node(node.treeNode->right, node.level + ));
  24. if(dep == node.level)
  25. ret[dep].push_back(node.treeNode->val);
  26. else{
  27. vector<int> tmp;
  28. dep++;
  29. ret.push_back(tmp);
  30. ret[dep].push_back(node.treeNode->val);
  31. }
  32. nodeQueue.pop();
  33. }
  34. return ret;
  35. }
  36. };

java版本的如下所示,同样的包括dfs以及bfs:

  1. public class Solution {
  2. public List<List<Integer>> levelOrder(TreeNode root) {
  3. List<List<Integer>> ret = new ArrayList<List<Integer>>();
  4. dfs(ret, root);
  5. return ret;
  6. }
  7.  
  8. public void dfs(List<List<Integer>> ret, int dep, TreeNode root){
  9. if(root == null)
  10. return;
  11. if(dep < ret.size()){
  12. ret.get(i).add(root.val);
  13. }else{
  14. List<Integer> tmp = new ArrayList<Integer>();
  15. tmp.add(root.val);
  16. ret.add(tmp);
  17. }
  18. dfs(ret, dep+1, root.left);
  19. dfs(ret, dep+1, root.right);
  20. }
  21. }

下面的是bfs,稍微麻烦一点,需要自己再创造一个数据结构,代码如下:

  1. public class Solution {
  2. public class Node{
  3. int level;
  4. TreeNode node;
  5. Node(TreeNode n, int l){
  6. level = l;
  7. node = n;
  8. }
  9. }
  10. public List<List<Integer>> levelOrder(TreeNode root) {
  11. int dep = -1;
  12. List<List<Integer>> ret = new ArrayList<List<Integer>>();
  13. Queue<Node> queue = new LinkedList<Node>();
  14. queue.add(new Node(root, 0));
  15. while(!queue.isEmpty()){
  16. Node n = queue.poll();
  17. if(n.node == null) continue;
  18. if(dep < n.level){
  19. List<Integer> tmp = new ArrayList<Integer>();
  20. tmp.add(n.node.val);
  21. ret.add(tmp);
  22. dep++;
  23. }else{
  24. ret.get(dep).add(n.node.val);
  25. }
  26. if(n.node.left != null) queue.add(new Node(n.node.left, n.level + 1));
  27. if(n.node.right != null) queue.add(new Node(n.node.right, n.level + 1));
  28. }
  29. return ret;
  30. }
  31. }

LeetCode OJ:Binary Tree Level Order Traversal(二叉树的层序遍历)的更多相关文章

  1. leetcode 题解:Binary Tree Level Order Traversal (二叉树的层序遍历)

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

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

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

  3. LeetCode 102. Binary Tree Level Order Traversal 二叉树的层次遍历 C++

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

  4. leetcode 102.Binary Tree Level Order Traversal 二叉树的层次遍历

    基础为用队列实现二叉树的层序遍历,本题变体是分别存储某一层的元素,那么只要知道,每一层的元素都是上一层的子元素,那么只要在while循环里面加个for循环,将当前队列的值(即本层元素)全部访问后再执行 ...

  5. 【LeetCode】Binary Tree Level Order Traversal(二叉树的层次遍历)

    这道题是LeetCode里的第102道题. 题目要求: 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15 ...

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

  7. [LeetCode] 314. Binary Tree Vertical Order Traversal 二叉树的垂直遍历

    Given a binary tree, return the vertical order traversal of its nodes' values. (ie, from top to bott ...

  8. LeetCode 102. Binary Tree Level Order Traversal02. 二叉树的层次遍历 (C++)

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

  9. Binary Tree Level Order Traversal II(层序遍历2)

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

  10. Leetcode 102 Binary Tree Level Order Traversal 二叉树+BFS

    二叉树的层次遍历 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * ...

随机推荐

  1. shell方式切割tomcat日志

    #!/bin/bash while true do cd /usr/local/tomcat/logs d=`date +%Y%m%d` d15=`date -d'15 day ago' +%Y%m% ...

  2. zabbix3.2.4监控MySQL5.7.16状态

    一.添加监控用户mysql> grant all privileges on *.* to 'zabbix'@'localhost' identified by 'zabbix';mysql&g ...

  3. hadoop学习第三天-MapReduce介绍&&WordCount示例&&倒排索引示例

    一.MapReduce介绍 (最好以下面的两个示例来理解原理) 1. MapReduce的基本思想 Map-reduce的思想就是“分而治之” Map Mapper负责“分”,即把复杂的任务分解为若干 ...

  4. 剑指offer 面试30题

    面试30题: 题目:包含min函数的栈 题:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数.在该栈中,调用min.push.pop的时间复杂度都是O(1) 解题思路:1)如果每次 ...

  5. java MD5Utils 加密工具类

    package com.sicdt.library.core.utils; import java.io.File; import java.io.FileInputStream; import ja ...

  6. Struts2笔记02——Struts2 概述(转)

    原始内容:https://www.tutorialspoint.com/struts_2/basic_mvc_architecture.htm Struts2是基于MVC设计模式的一种流行.成熟的We ...

  7. Python编程-多进程一

    一.python并发编程之多进程 1.multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在pyth ...

  8. java基础之final/static/static final

    一.final 1.final修饰变量(常量) final修饰的成员变量表示常量,一旦给定初值既无法改变 2.final方法 final修饰方法,表示该方法不能被子类重写 好处:比非final方法要快 ...

  9. 高通LCD驱动调试

    本文转载自:http://www.itgo.me/a/x6305658852004979994/lcd%20qcom 来自 :http://blog.csdn.net/dacaozuo/article ...

  10. Linux bridge

    CentOS bridge 配置: 1.创建br0配置文件  touch /etc/sysconfig/network-scripts/ifcfg-br0 2.修改bro配置文件 vi /etc/sy ...