Binary Tree Level Order Traversal 二叉树的层序遍历
2016-01-08 19:45
316 查看
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
return its level order traversal as:
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. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> outter=new ArrayList<List<Integer>>(); List<Integer> inner=new LinkedList<Integer>(); if(root==null) return outter; inner.add(root.val); outter.add(inner); inner=new LinkedList<Integer>(); int curcount=1; int nexcount=0; Queue<TreeNode> queue=new LinkedList<TreeNode>(); queue.add(root); while(!queue.isEmpty()){ TreeNode node=queue.poll(); --curcount; if(node.left!=null){ queue.add(node.left); inner.add(node.left.val); ++nexcount; } if(node.right!=null){ queue.add(node.right); inner.add(node.right.val); ++nexcount; } if(curcount==0){ curcount=nexcount; nexcount=0; if(!inner.isEmpty()){ outter.add(inner); inner=new LinkedList<Integer>(); } } } return outter; } } 下边的写法没有对头节点进行特殊处理,包含在了统一的处理范围之内,据说,这就是传统的BFS!! public class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> outter=new ArrayList<List<Integer>>(); List<Integer> inner=new LinkedList<Integer>(); if(root==null) return outter; int curcount=1; int nexcount=0; Queue<TreeNode> queue=new LinkedList<TreeNode>(); queue.add(root); while(!queue.isEmpty()){ TreeNode node=queue.poll(); inner.add(node.val); --curcount; if(node.left!=null){ queue.add(node.left); ++nexcount; } if(node.right!=null){ queue.add(node.right); ++nexcount; } if(curcount==0){ curcount=nexcount; nexcount=0; if(!inner.isEmpty()){ outter.add(inner); inner=new LinkedList<Integer>(); } } } return outter; } }
相关文章推荐
- 【LEETCODE】162-Find Peak Element [Python]
- css3
- DVR 和 NVR 的区别
- 最长回文子串
- Android数据过滤器:Filter
- Android游戏——飞行射击游戏1945最简单的实现
- C++开发人脸性别识别教程(7)——搭建MFC框架之界面绘制
- sql2012和java链接
- UIButton+Blocks
- 关于知识整理、积累与记忆
- 蓝桥杯 BASIC-3 字母图形【模拟】
- 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/OmniCppComplete
- 【Linux运维-集群技术进阶】Nginx强大的平滑升级
- [leetcode oj 226]Invert Binary Tree
- Android中的windowSoftInputMode属性详解
- 浅析数据库连接池(一)
- 蓝懿IOS学习UITableView自定义UITableViewCell类
- 编辑器之神VIM 总结 基础部分
- 【膳活】APP
- 【计算机基础】字符集和字符编码(Charset & Encoding)