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] ] 这道题的意思是树的层序遍历,用到了队列,每打印一个节点的时候,如果这个结点有左右子树,则将其左右子树加入队列。由于输出的形式是每一层相当于list中的一个元素,因此在程序中每一层都用到了for循环,貌似图的广度优先也是用的队列代码如下:
public List<List<Integer>> levelOrder(TreeNode root) { ArrayList result = new ArrayList(); if(root==null){ return result; } Queue<TreeNode> q = new LinkedList<TreeNode>(); q.offer(root); while(!q.isEmpty()){ ArrayList<Integer> lever = new ArrayList<Integer>(); int size = q.size(); for(int i = 0;i<size;i++){ TreeNode temp = q.poll(); lever.add(temp.val); if(temp.left!=null){ q.offer(temp.left); } if(temp.right!=null){ q.offer(temp.right); } } result.add(lever); } return result; }
队列的方法有如下几种:
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素 如果队列为空,则阻塞
时间: 2024-10-13 12:21:10