题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
代码:
<span style="color:#000099;">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; } } */ public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { //先把需要的准备好 ArrayList<ArrayList<Integer>> arrayList = new ArrayList<>(); ArrayList<Integer> list = new ArrayList<>(); Queue<TreeNode> queue = new LinkedList<>();//queue 是一个接口 if(pRoot != null){ int nextNodes = 0; int needPrint = 1;//初始状态,下一层节点0,需要被打印的结点1,下一层节点在循环中递增 queue.add(pRoot); while(!queue.isEmpty()){ //队不空的情况下 TreeNode node = queue.peek(); list.add(node.val);//只需要把结点的值存起来就行了 if(node.left != null){ queue.add(node.left); ++nextNodes; } if(node.right != null){ queue.add(node.right); ++nextNodes; } queue.poll();//移除队列一个元素 --needPrint; if(needPrint == 0){ arrayList.add(new ArrayList(list));//一行打完了,到下一行 list.clear(); needPrint = nextNodes; nextNodes = 0; } } } return arrayList; } }</span>
时间: 2024-11-04 20:04:23