题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
题目链接:
分析:
用一个队列记录当前访问的节点,并将当前的节点的子节点加到队列尾。
import java.util.ArrayList; import java.util.LinkedList; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list =new ArrayList<>(); //空格的情况直接返回 if(root == null){ return list; } LinkedList<TreeNode> mas =new LinkedList<>(); //压入主队列根节点 mas.add(root); while(!mas.isEmpty()){ //每一次循环,将当前节点的子节点加到队列的尾部。 while(!mas.isEmpty()){ TreeNode node = mas.pop(); list.add(node.val); if(node.left != null){ mas.add(node.left); } if(node.right != null){ mas.add(node.right); } } } return list; } }
分析:
用两个辅助队列。
主队列存储当前一行的记录。
辅助队列记录下下一行的记录,记录完后,再将这行记录放入主队列中。
import java.util.ArrayList; import java.util.LinkedList; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list =new ArrayList<>(); //空格的情况直接返回 if(root == null){ return list; } //主队列和辅助队列 LinkedList<TreeNode> mas =new LinkedList<>(); LinkedList<TreeNode> fz =new LinkedList<>(); //压入主队列根节点 mas.add(root); while(!mas.isEmpty()){ //每一次循环,将主队列代表的一行记录加到list中,并将下一行记录到辅助队列 while(!mas.isEmpty()){ TreeNode node = mas.pop(); list.add(node.val); if(node.left != null){ fz.add(node.left); } if(node.right != null){ fz.add(node.right); } } //将辅助队列的一行记录加到主队列中 while(!fz.isEmpty()){ mas.add(fz.pop()); } } return list; } }