剑指offer题21

来源:互联网 发布:sql offset fetch 编辑:程序博客网 时间:2024/06/05 00:39
package jianzhioffer;import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;/** * 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 * 树的层次遍历,BFS,借助队列实现 * */public class Solution21 {/**节点类public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public static ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {ArrayList<Integer> arr = new ArrayList<Integer>();if(root == null){return arr;}Queue<TreeNode> queue = new LinkedList<TreeNode>();TreeNode head = root;queue.offer(head);while(!queue.isEmpty()){head = queue.poll();arr.add(head.val);if(head.left != null){queue.offer(head.left);}if(head.right != null){queue.offer(head.right);}}return arr;    }public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] a1 = new int[n];for(int i = 0;i<n;i++){a1[i] = sc.nextInt();}TreeNode tree1 = new TreeNode(a1[0]);TreeNode tree2 = new TreeNode(a1[1]);TreeNode tree3 = new TreeNode(a1[2]);TreeNode tree4 = new TreeNode(a1[3]);TreeNode tree5 = new TreeNode(a1[4]);TreeNode tree6 = new TreeNode(a1[5]);TreeNode tree7 = new TreeNode(a1[6]);tree1.left = tree2;    tree1.right = tree3;    tree2.left = tree4;    tree2.right = tree5;    tree3.left = tree6;    tree3.right = tree7;        BinaryTree bt = new BinaryTree();    System.out.println("源二叉树的前序遍历结果:");    bt.preOrder(tree1);        ArrayList<Integer> list = PrintFromTopToBottom(tree1);        System.out.println(list.toString());}}