剑指offer之面试题23:从上往下打印二叉树

来源:互联网 发布:亲宝宝软件下载 编辑:程序博客网 时间:2024/05/29 16:52

题目描述

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

输入二叉树            8           /  \          6   10         / \  / \        5  7 9  11输出 8,6,10,5,7,9,11

思路:二叉树的层次遍历
初始化队列,结点8入队,结点8出队,8的孩子结点不为空,把8的孩子结点6,10放进队列中。6出队,6的孩子结点不为空,把6的孩子结点5,7放进队列中,现在队列中为10,5,7,然后10出队,…,直到叶子结点入队,结束。

用表格的形式展现:

步骤 操作 队列 1 8入队 8 2 8出队,8孩子节点6,10入队 6,10 3 6出队,6孩子节点5,7入队 10,5,7 4 10出队,10孩子节点9,11入队 5,7,9,11 5 5出队,孩子节点为空,不需入队 7,9,11 6 7出队,孩子节点为空,不需入队 9,11 7 9出队,孩子节点为空,不需入队 11 8 11出队,孩子节点为空,不需入队

总结一下:每次出队,如果结点有孩子结点,则将其孩子结点入队。然后队首元素出队,循环,直到队列为空。

根据分析,写代码如下:

import java.util.ArrayList;/**public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/import java.util.Queue;import java.util.LinkedList;public class Solution {    public ArrayList<Integer> PrintFromTopToBottom(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 temp=queue.poll();            list.add(temp.val);            if(temp.left!=null)                queue.offer(temp.left);            if(temp.right!=null)                queue.offer(temp.right);        }        return list;    }}
0 0