不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。
数据范围:
0<=节点总数<=1000
-1000<=节点值<=1000
{8,6,10,#,#,2,1}
[8,6,10,2,1]
{5,4,#,3,#,2,#,1}
[5,4,3,2,1]
import java.util.*; import java.util.ArrayList; /** 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> result = new ArrayList<>(); // 节点队列 用来实现层序便利 Queue<TreeNode> queue = new LinkedList<>(); if (root != null) { // 首先把头结点加入队列 queue.add(root); // 循环便利队列 队列为空说明遍历完毕 while(!queue.isEmpty()) { // 获取队列头结点 并将该节点的val放入结果集合 TreeNode p = queue.poll(); result.add(p.val); // 将该节点的左右孩子按顺序加入队列尾部 if (p.left != null) { queue.add(p.left); } if (p.right != null) { queue.add(p.right); } } } return result; } }层序便利 用队列实现
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 { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> res = new ArrayList<>(); if (root == null) return new ArrayList<>(); if (root.left == null && root.right == null) { res.add(root.val); return res; } ArrayList<TreeNode> temp = new ArrayList<>(); temp.add(root); while (!temp.isEmpty()) { ArrayList<TreeNode> temp2 = new ArrayList<>(); for (TreeNode node : temp) { res.add(node.val); if (node.left != null) temp2.add(node.left); if (node.right != null) temp2.add(node.right); } temp = temp2; } return res; } }
import java.util.*; public class Solution { //领导是第一个离职的,大家都排着队离职,从上往下离职,直到所有员工都离职 public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list = new ArrayList<>(); if (root == null) { return list; } LinkedList<TreeNode> queue=new LinkedList<>(); queue.add(root);//先把领导加入离职队列中 while(!queue.isEmpty()){ TreeNode byeNode=queue.poll();//正在离职的人 int value=byeNode.val; list.add(value);//离职后,需要把你的成就留下 if(byeNode.left!=null){//如果离职的那个人有左膀 queue.add(byeNode.left);//他的左膀也要排着队离职 } if(byeNode.right!=null){//如果离职的那个人有右臂 queue.add(byeNode.right);//他的右臂也要排着队离职 } } return list; } }
import java.util.*; import java.util.ArrayList; /** 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 arr = new ArrayList<>(); if (root == null) return arr; ArrayDeque<TreeNode> queue = new ArrayDeque<>(); queue.add(root); while (!queue.isEmpty()) { TreeNode node = queue.poll(); arr.add(node.val); if (node.left != null) queue.add(node.left); if (node.right != null) queue.add(node.right); } return arr; } }
import java.util.*; import java.util.ArrayList; /** 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> res = new ArrayList<>(); if (root == null) { return res; } ArrayDeque<TreeNode> deque = new ArrayDeque<>(); deque.add(root); while (!deque.isEmpty()) { int size = deque.size(); for (int i = 0; i < size; i++) { TreeNode treeNode = deque.removeFirst(); res.add(treeNode.val); if (treeNode.left != null) { deque.add(treeNode.left); } if (treeNode.right != null) { deque.add(treeNode.right); } } } return res; } }
import java.util.*; public class Solution { ArrayList<Integer> result = new ArrayList<Integer>(); public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { if(root==null){ return new ArrayList<Integer>(); } Stack<TreeNode> stack = new Stack<TreeNode>(); stack.push(root); dps(stack); return result; } public void dps(Stack<TreeNode> stack) { Stack<TreeNode> stack1 = new Stack<TreeNode>(); Stack<TreeNode> stack2 = new Stack<TreeNode>(); if(stack.empty()){ return; } while(!stack.empty()){ TreeNode root = stack.pop(); result.add(root.val); if(root.left!=null){ stack1.push(root.left); } if(root.right!=null){ stack1.push(root.right); } } while(!stack1.empty()){ stack2.push(stack1.pop());//保证顺序入栈 } dps(stack2); } }
public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer>arrayList=new ArrayList<>(); if(root==null) return arrayList; Queue<TreeNode>queue=new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()){ int num=queue.size(); for (int i = 0; i < num; i++) { TreeNode treeNode=queue.poll(); arrayList.add(treeNode.val); if(treeNode.left!=null) queue.offer(treeNode.left); if(treeNode.right!=null) queue.offer(treeNode.right); } } return arrayList; } }
public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> ans = new ArrayList<>(); if (root == null) { return ans; } Queue<TreeNode> queue = new ArrayDeque<>(); queue.add(root); while (!queue.isEmpty()) { TreeNode cur = queue.poll(); ans.add(cur.val); if (cur.left!=null){ queue.add(cur.left); } if (cur.right!=null){ queue.add(cur.right); } } return ans; } }
public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list = new ArrayList<>(); ArrayList<TreeNode> l = new ArrayList<>(); if(root != null){ l.add(root); }else{ return list; } int i =0; while(i < l.size()){ list.add(l.get(i).val); if(l.get(i).left != null){ l.add(l.get(i).left); } if(l.get(i).right != null){ l.add(l.get(i).right); } i++; } return list; } }
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 { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> ans = new ArrayList<>(); Queue<TreeNode> queue = new LinkedList<>(); // 放入遍历二叉树的节点(本质上是维护宽搜) if (root != null) { queue.add(root); } // 迭代的过程->宽搜 while (!queue.isEmpty()) { TreeNode node = queue.peek(); ans.add(node.val); // 将当前节点的val值放入ArrayList中 // 同层节点从左至右打印 if (node.left != null) { queue.add(node.left); } if (node.right != null) { queue.add(node.right); } queue.poll(); // 当前节点val值已经放入ans中,所以要删去 } return ans; } }
import java.util.ArrayList; import java.util.LinkedList; public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> result = new ArrayList<>(); if (root == null) { return result; } LinkedList<TreeNode> nexLevel = new LinkedList<>(); nexLevel.addLast(root); while (!nexLevel.isEmpty()) { TreeNode current = nexLevel.removeFirst(); if (current != null) { result.add(current.val); nexLevel.addLast(current.left); nexLevel.addLast(current.right); } } return result; } }
import java.util.Deque; import java.util.ArrayDeque; public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list=new ArrayList(); if(root==null) return list; Deque<TreeNode> deque=new ArrayDeque(); deque.offer(root); int size=1; int nextsize=0; TreeNode tmp=null; while(!deque.isEmpty()){ nextsize=0; for(int i=0;i<size;i++){ tmp=deque.poll(); list.add(tmp.val); if(tmp.left!=null){ deque.offer(tmp.left); nextsize++; } if(tmp.right!=null){ deque.offer(tmp.right); nextsize++; } } size=nextsize; } return list; } }
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 { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { Queue<TreeNode> queue = new LinkedList<TreeNode>(); ArrayList<Integer> res = new ArrayList<Integer>(); if(root==null){ return res; } queue.add(root);//根节点入队 while(!queue.isEmpty()){ //节点出队 TreeNode node = queue.remove(); res.add(node.val); if(node.left!=null) queue.add(node.left);//节点左子树入队 if(node.right!=null) queue.add(node.right);//节点右子树入队 } return res; } }
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { if (root == null) { return new ArrayList<>(); } ArrayList<Integer> result = new ArrayList<>(); ArrayList<TreeNode> tmp1 = new ArrayList<>(); ArrayList<TreeNode> tmp2 = new ArrayList<>(); tmp1.add(root); while (!(tmp1.isEmpty() && tmp2.isEmpty())) { for (TreeNode treeNode : tmp1) { if (treeNode == null) { continue; } result.add(treeNode.val); tmp2.add(treeNode.left); tmp2.add(treeNode.right); } tmp1.clear(); for (TreeNode treeNode : tmp2) { if (treeNode == null) { continue; } result.add(treeNode.val); tmp1.add(treeNode.left); tmp1.add(treeNode.right); } tmp2.clear(); } return result; }
import java.util.ArrayList; import java.util.LinkedList; public class Solution { //层序遍历,用队列,非递归 public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> resList = new ArrayList<>(); if(root == null) return resList; //queue用LinkedList实现 LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(root); while(!queue.isEmpty()){ //queue里面没有null TreeNode tempNode = queue.poll(); resList.add(tempNode.val); if(tempNode.left != null) queue.add(tempNode.left); if(tempNode.right != null) queue.add(tempNode.right); } return resList; } }