LeetCode OJ: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}
,
- 3
- / \
- 9 20
- / \
- 15 7
return its level order traversal as:
- [
- [3],
- [9,20],
- [15,7]
- ]
层序遍历,既可以用dfs实现也可以用bfs实现,用bfs实现的时候应该借助队列,代码如下:
dfs:
- class Solution {
- public:
- vector<vector<int>> levelOrder(TreeNode* root) {
- dfs(root, );
- return ret;
- }
- void dfs(TreeNode * root, int dep)
- {
- if(!root) return;
- if(dep < ret.size()){
- ret[dep].push_back(root->val);
- }else{
- vector<int> tmp;
- tmp.push_back(root->val);
- ret.push_back(tmp);
- }
- dfs(root->left, dep+);
- dfs(root->right, dep+);
- }
- private:
- vector<vector<int>> ret;
- };
bfs:
- class Solution {
- private:
- struct Node{
- TreeNode * treeNode;
- int level;
- Node(){}
- Node(TreeNode * node, int lv)
- :treeNode(node), level(lv){}
- };
- public:
- vector<vector<int>> levelOrder(TreeNode* root) {
- queue<Node> nodeQueue;
- vector<vector<int>> ret;
- if(root == NULL)
- return ret;
- nodeQueue.push(Node(root, ));
- int dep = -;
- while(!nodeQueue.empty()){
- Node node = nodeQueue.front();
- if(node.treeNode->left)
- nodeQueue.push(Node(node.treeNode->left, node.level + ));
- if(node.treeNode->right)
- nodeQueue.push(Node(node.treeNode->right, node.level + ));
- if(dep == node.level)
- ret[dep].push_back(node.treeNode->val);
- else{
- vector<int> tmp;
- dep++;
- ret.push_back(tmp);
- ret[dep].push_back(node.treeNode->val);
- }
- nodeQueue.pop();
- }
- return ret;
- }
- };
java版本的如下所示,同样的包括dfs以及bfs:
- public class Solution {
- public List<List<Integer>> levelOrder(TreeNode root) {
- List<List<Integer>> ret = new ArrayList<List<Integer>>();
- dfs(ret, root);
- return ret;
- }
- public void dfs(List<List<Integer>> ret, int dep, TreeNode root){
- if(root == null)
- return;
- if(dep < ret.size()){
- ret.get(i).add(root.val);
- }else{
- List<Integer> tmp = new ArrayList<Integer>();
- tmp.add(root.val);
- ret.add(tmp);
- }
- dfs(ret, dep+1, root.left);
- dfs(ret, dep+1, root.right);
- }
- }
下面的是bfs,稍微麻烦一点,需要自己再创造一个数据结构,代码如下:
- public class Solution {
- public class Node{
- int level;
- TreeNode node;
- Node(TreeNode n, int l){
- level = l;
- node = n;
- }
- }
- public List<List<Integer>> levelOrder(TreeNode root) {
- int dep = -1;
- List<List<Integer>> ret = new ArrayList<List<Integer>>();
- Queue<Node> queue = new LinkedList<Node>();
- queue.add(new Node(root, 0));
- while(!queue.isEmpty()){
- Node n = queue.poll();
- if(n.node == null) continue;
- if(dep < n.level){
- List<Integer> tmp = new ArrayList<Integer>();
- tmp.add(n.node.val);
- ret.add(tmp);
- dep++;
- }else{
- ret.get(dep).add(n.node.val);
- }
- if(n.node.left != null) queue.add(new Node(n.node.left, n.level + 1));
- if(n.node.right != null) queue.add(new Node(n.node.right, n.level + 1));
- }
- return ret;
- }
- }
LeetCode OJ:Binary Tree Level Order Traversal(二叉树的层序遍历)的更多相关文章
- leetcode 题解:Binary Tree Level Order Traversal (二叉树的层序遍历)
题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ...
- 【LeetCode】102. Binary Tree Level Order Traversal 二叉树的层序遍历 (Python&C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS DFS 日期 题目地址:https://lee ...
- 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, ...
- leetcode 102.Binary Tree Level Order Traversal 二叉树的层次遍历
基础为用队列实现二叉树的层序遍历,本题变体是分别存储某一层的元素,那么只要知道,每一层的元素都是上一层的子元素,那么只要在while循环里面加个for循环,将当前队列的值(即本层元素)全部访问后再执行 ...
- 【LeetCode】Binary Tree Level Order Traversal(二叉树的层次遍历)
这道题是LeetCode里的第102道题. 题目要求: 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15 ...
- [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, ...
- [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 ...
- 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 ...
- 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 ...
- Leetcode 102 Binary Tree Level Order Traversal 二叉树+BFS
二叉树的层次遍历 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * ...
随机推荐
- 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% ...
- zabbix3.2.4监控MySQL5.7.16状态
一.添加监控用户mysql> grant all privileges on *.* to 'zabbix'@'localhost' identified by 'zabbix';mysql&g ...
- hadoop学习第三天-MapReduce介绍&&WordCount示例&&倒排索引示例
一.MapReduce介绍 (最好以下面的两个示例来理解原理) 1. MapReduce的基本思想 Map-reduce的思想就是“分而治之” Map Mapper负责“分”,即把复杂的任务分解为若干 ...
- 剑指offer 面试30题
面试30题: 题目:包含min函数的栈 题:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数.在该栈中,调用min.push.pop的时间复杂度都是O(1) 解题思路:1)如果每次 ...
- java MD5Utils 加密工具类
package com.sicdt.library.core.utils; import java.io.File; import java.io.FileInputStream; import ja ...
- Struts2笔记02——Struts2 概述(转)
原始内容:https://www.tutorialspoint.com/struts_2/basic_mvc_architecture.htm Struts2是基于MVC设计模式的一种流行.成熟的We ...
- Python编程-多进程一
一.python并发编程之多进程 1.multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在pyth ...
- java基础之final/static/static final
一.final 1.final修饰变量(常量) final修饰的成员变量表示常量,一旦给定初值既无法改变 2.final方法 final修饰方法,表示该方法不能被子类重写 好处:比非final方法要快 ...
- 高通LCD驱动调试
本文转载自:http://www.itgo.me/a/x6305658852004979994/lcd%20qcom 来自 :http://blog.csdn.net/dacaozuo/article ...
- Linux bridge
CentOS bridge 配置: 1.创建br0配置文件 touch /etc/sysconfig/network-scripts/ifcfg-br0 2.修改bro配置文件 vi /etc/sy ...