题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
我的解法:没做出来哇。。以为递归可以的,但是递归只能实现前序和后序遍历这种的。
正确解法:使用bfs,因为队列先进先出原则,我们先压左节点,再压右节点,即可实现当左子树的右节点遍历完后回到父节点的右节点。
import java.util.ArrayList;
import java.util.*;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer>list = new ArrayList<>();
Queue<TreeNode>queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()){//当队列为空时,即全部遍历完成了。
TreeNode node = queue.remove();
if(node == null)//我们最开始的左节点是最先压入队列的,所以我们还是从最开始压入队列的元素开始添加
continue;
list.add(node.val);
queue.add(node.left);
queue.add(node.right);
}
return list;
}
}