二叉树的层序遍历
层序遍历
思维:一层一层的遍历,先进先出的思想,所以可以使用队列来存放结点用于遍历(此处使用了LinkedList,因为其实现了Deque接口,可以当做双端队列使用)。先将根结点加入队列,出队列时记录该结点(并将该结点打印或者也可以存放到一个集合中(看自己喜好)),记录结点是为了用于判断其是否有左子结点、右子结点,有则继续加入队列……依次循环遍历整棵树
//层序遍历
public static void/*ArrayList<Integer>*/ cenErgodic(TreeNode node){
//创建队列,存放树中的结点(加入队列)
LinkedList<TreeNode> nodes = new LinkedList<>();
//创建队列,存放层序遍历的结果(键)
// ArrayList<Integer> keys = new ArrayList<>();
//将根结点加入队列
nodes.addFirst(node);
//循环遍历树
while(!nodes.isEmpty()) {
//将结点队列中的结点出队列
node = nodes.removeLast();
//将当前结点存的键加入要输出的层序遍历的结果集合中
// keys.add(node.val);
//或直接打印结果
System.out.print(node.val+" ");
//再判断该结点是否有左子结点
if(node.left != null) {
//有则将其加入结点队列中
nodes.addFirst(node.left);
}
//判断是否有右子结点
if (node.right != null) {
//有则将其也加入结点队列中
nodes.addFirst(node.right);
}
}
// return keys;
}