当前位置: 首页 > news >正文

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




本题考查基本的BFS算法,把逐层遍历的节点添加到结果集中。


实现代码:





/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left;
 *     public TreeNode right;
 *     public TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public IList<IList<int>> LevelOrder(TreeNode root) 
    {
        if(root == null){
		    return new List<IList<int>>();
    	}
    	
    	var starts = new List<TreeNode>();
    	if(root.left != null){
    		starts.Add(root.left);
    	}
    	if(root.right != null){
    		starts.Add(root.right);
    	}
    	
    	var result = new List<IList<int>>();
    	result.Add(new List<int>(){root.val});
    	Travel(starts, result);
    	return result;
    }


public void Travel(IList<TreeNode> parents, IList<IList<int>> result)
{
	// stop
	if(parents == null || parents.Count == 0){
		return ;
	}
	
	// add previous level nodes
	result.Add(parents.Select(x=>x.val).ToList());
	
	// get each parent childs and combine, do BFS
	var children = new List<TreeNode>();
	foreach(var n in parents){
		var nodes = Children(n);
		//add children
		children.AddRange(nodes);
	}
	
	Travel(children, result);
}


private IList<TreeNode> Children(TreeNode n)
{
	var nodes = new List<TreeNode>();
	if(n.left != null){
		nodes.Add(n.left);
	}
	if(n.right != null){
		nodes.Add(n.right);
	}
	
	return nodes;
}


}


相关文章:

  • LeetCode -- Course Schedule II
  • [Real world Haskell] 中文翻译:第二章 类型与函数
  • LeetCode -- Next Permutation
  • [Real world Haskell] 中文翻译:第三章 定义类型,流式函数
  • LeetCode -- Search Matrix
  • LeetCode -- Sort Colors
  • 理解HTTP消息头
  • LeetCode -- Convert SortedList To BST
  • HTTP协议返回状态码表
  • LeetCode -- Insert Interval
  • 推荐WPF的好书
  • LeetCode -- Longest Valid Parentheses
  • 利用Intel博锐技术解决桌面管理难题
  • LeetCode -- Permutations
  • LeetCode -- Construct Binary Tree from Inorder and Postorder Traversal
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【刷算法】从上往下打印二叉树
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • java取消线程实例
  • node和express搭建代理服务器(源码)
  • vuex 学习笔记 01
  • Vue官网教程学习过程中值得记录的一些事情
  • Webpack 4 学习01(基础配置)
  • 从重复到重用
  • 大快搜索数据爬虫技术实例安装教学篇
  • 关于使用markdown的方法(引自CSDN教程)
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 理解在java “”i=i++;”所发生的事情
  • 面试总结JavaScript篇
  • 深入浅出Node.js
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 突破自己的技术思维
  • 线性表及其算法(java实现)
  • 一份游戏开发学习路线
  • #{} 和 ${}区别
  • $.each()与$(selector).each()
  • (1)常见O(n^2)排序算法解析
  • (windows2012共享文件夹和防火墙设置
  • (独孤九剑)--文件系统
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (十六)一篇文章学会Java的常用API
  • (万字长文)Spring的核心知识尽揽其中
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • *1 计算机基础和操作系统基础及几大协议
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .cn根服务器被攻击之后
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NetCore 如何动态路由
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET正则基础之——正则委托
  • .NET中使用Redis (二)
  • /etc/fstab和/etc/mtab的区别
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...