二叉树的层序遍历
public class LevelOrder {
public List> levelOrder(TreeNode root) {
List> ret = new ArrayList>();
if (root == null) {
return ret;
}
//利用队列做辅助结构
Queue queue = new linkedList();
queue.offer(root);
while (!queue.isEmpty()) {
List level = new ArrayList();
int currentLevelSize = queue.size();
while(currentLevelSize>0){
//先将队列的队头取出
TreeNode node = queue.poll();
level.add(node.val);
//然后再将此节点的左右节点进行入队
if (node.left!= null)queue.offer(node.left);
if (node.right!= null)queue.offer(node.right);
//对队长进行减减
currentLevelSize--;
}
//然后将树此层的节点压入链表中
ret.add(level);
}
return ret;
}
public static void main(String[] args) {
TreeNode treeNode = new TreeNode(1);
treeNode.left = new TreeNode(2);
treeNode.right = new TreeNode(3);
treeNode.left.left =new TreeNode(4);
treeNode.left.right = new TreeNode(5);
List> list = new LevelOrder().levelOrder(treeNode);
System.out.println(list);
}
}
思路:利用队做辅助结构,因为层序遍历,是从左到右的顺序遍历,所以使用队,不使用栈,栈适合深度遍历。