leetcode微软谷歌面试题102. Binary Tree Level Order Traversal
来源:互联网 发布:淘宝c店会员积分 编辑:程序博客网 时间:2024/06/01 07:11
102. 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,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7]]
这道题是树的层序遍历题,也是广度搜索,题目的大致意思就是遍历二叉树,将每一层的节点值拼装成一个序列,最后将所有的序列拼装成一个
大的序列,并且返回该序列。
下面给出一段最简单的层序遍历代码,该代码是最基本的层序遍历代码,层序遍历一般都会借助队列实现。如果队列不为空就将队列该节点出队,并将该队列的不为空的左右孩子入队,直到队列为空,才把节点遍历完全
public static void levelOrder(TreeNode root) { Queue queue = new LinkedList() ; queue.add(root); if(root == null) return; while(!queue.isEmpty()) { TreeNode temp = (TreeNode) queue.poll(); System.out.println(temp.val+" "); if(temp.left != null) queue.add(temp.left); if(temp.right != null) queue.add(temp.right); } }这道题的层序遍历也是我们在这个基础上做的,首先遍历完每层节点后我们都添加一个标识为,该标志位我们设置为null。
这样我们每次出队一个节点node,并将node的不为空的左右孩子入队,直到发现队列里的节点node为null时就说明该节点
上一层的节点全部遍历完全,并且已经将上一层所有节点的左右孩子都已经入队列,这时队列入队null,标志该层次结束。
每次判断队列时,队列的大小必须得大于1,因为最后一个节点一定是null节点。
代码如下
public class binarytreeleveltraversal { public static List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> lists = new LinkedList(); Queue<TreeNode> queue = new LinkedList(); if(root == null) return lists; List list = new LinkedList(); //设置一个标志,如果说发现null标志的话就说明这一层完结 queue.add(root); queue.add(null); while(queue.size()>1)//因为最后一个节点一定是null { TreeNode node = queue.poll(); if(node == null) { lists.add(list); queue.add(null); list = new LinkedList();//每次到下一层时就重新生成list对象 } else { list.add(node.val); if(node.left!=null) { queue.add(node.left); } if(node.right!=null) { queue.add(node.right); } } } lists.add(list);//最后一次遍历组装的list拼装到lists return lists; }public static void main(String[] args) {// TODO Auto-generated method stubTreeNode root = new TreeNode(1);TreeNode root1 = new TreeNode(4);TreeNode root2 = new TreeNode(2);TreeNode root3 = new TreeNode(3);root.left = root1;root.right = root2;root2.left = root3;System.out.println(levelOrder( root));}}刚开始做这道题时一直在想存储遍历内容的数据结构,也发现了一些问题,比如:如果lists的size<=你获取址的index的话,就会出现错误,所以list并不想数组一样,它没有内容时不能用get方法,只有add后才能获取。
0 0
- leetcode微软谷歌面试题102. Binary Tree Level Order Traversal
- LeetCode 102. Binary Tree Level Order Traversal
- [LeetCode]102.Binary Tree Level Order Traversal
- [Leetcode] 102. Binary Tree Level Order Traversal
- LeetCode --- 102. Binary Tree Level Order Traversal
- [leetcode] 102.Binary Tree Level Order Traversal
- 【leetcode】102. Binary Tree Level Order Traversal
- Leetcode 102. Binary Tree Level Order Traversal
- 102. Binary Tree Level Order Traversal LeetCode
- [leetcode] 102. Binary Tree Level Order Traversal
- Leetcode 102. Binary Tree Level Order Traversal
- LeetCode *** 102. Binary Tree Level Order Traversal
- LeetCode 102. Binary Tree Level Order Traversal
- LeetCode 102. Binary Tree Level Order Traversal
- leetcode-102. Binary Tree Level Order Traversal
- 【leetcode】102. Binary Tree Level Order Traversal
- LeetCode 102. Binary Tree Level Order Traversal
- 【leetcode】102. Binary Tree Level Order Traversal
- 对链表数据归并排序
- linux查询系统,硬件信息命令
- C++继承详解
- js和java中数组的区别和定义方式
- 关于内嵌类
- leetcode微软谷歌面试题102. Binary Tree Level Order Traversal
- 基于spring boot框架访问zookeeper
- Code Jam 2017 Qualification Round Problem C. Bathroom Stalls
- Java设计模式六大原则
- [P1160]队列安排
- P1119 灾后重建(离线Floyed)
- C++模板实现二叉树(六 AVL树基础与旋转)
- 欢迎使用CSDN-markdown编辑器
- 【Git】Git 和 SVN 之间的五个基本区别