import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; /* * 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 */ public class PrintFromTopToBottom2 { //非递归方法:借助队列,某个元素弹出之后,把其左右子节点压入队列 public ArrayList<Integer> printFromTopToBottom2(TreeNode root) { ArrayList<Integer> list = new ArrayList<Integer>(); if(root == null) return list; Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); while(!queue.isEmpty()) { TreeNode node = queue.poll(); if(node.left != null) { queue.offer(node.left); } if(node.right != null) { queue.offer(node.right); } list.add(node.val); } return list; } //递归方法:先放入根节点,再放入根节点的左右节点,再对根节点的左右节点进行遍历。 public ArrayList<Integer> printFromTopToBottom(TreeNode root) { ArrayList<Integer> list = new ArrayList<Integer>(); if(root == null) return list; list.add(root.val); addNodeValue(root, list); return list; } public void addNodeValue(TreeNode root, ArrayList<Integer> list) { if(root.left == null && root.right == null) return; if(root.left != null) list.add(root.left.val); if(root.right != null) list.add(root.right.val); if(root.left != null) addNodeValue(root.left, list); if(root.right != null) addNodeValue(root.right, list); } public static void main(String[] args) { TreeNode root1 = new TreeNode(1); root1.left = new TreeNode(2); root1.right = new TreeNode(3); root1.left.left = new TreeNode(4); root1.left.right = new TreeNode(5); root1.right.left = new TreeNode(6); root1.right.right = new TreeNode(7); root1.left.left.left = new TreeNode(8); //root1.left.left.right = new TreeNode(9); System.out.println(new PrintFromTopToBottom2().printFromTopToBottom2(root1)); } }
《剑指offer》-从上到下按层打印二叉树
最新推荐文章于 2020-11-28 06:10:49 发布