剑指offer----从上往下打印二叉树

来源:互联网 发布:淘宝如何销售农产品 编辑:程序博客网 时间:2024/06/05 17:24
package offer;/** * 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 */import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/**public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class PrintTopToBottom {    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {        //创建一个数组用于返回最后打印出来的值        ArrayList<Integer> list = new ArrayList<Integer>();        //如果方法获取的根节点为null,直接返回空的list        if(root == null){            return list;        }        //创建一个队列        Queue<TreeNode> queue = new LinkedList<TreeNode>();        //将根节点添加进队列之中        /*         * 假设给出的树为         *           8         *          / \         *         6   10         *        / \  / \         *       5  7 9  11         */        //那么此时队列为 --> 8        queue.offer(root);        //当队列不为空的时候        while(!queue.isEmpty()){            //将队列头移除并标记为treeNode            TreeNode treeNode = queue.poll();            //如果当前节点的左边不为null,就添加进队列            //此时队列为 --> 6            if(treeNode.left != null){                queue.offer(treeNode.left);            }            //如果当前节点的右边不为null,就添加进队列            //此时队列为 --> 6 10            if(treeNode.right != null){                queue.offer(treeNode.right);            }            //将当前treeNode代表的值添加进ArrayList之中            list.add(treeNode.val);        }        /*         *  以这个树为例         *           8         *          / \         *         6   10         *        / \  / \         *       5  7 9  11         *   第几次                  队列中的元素         *     1            8         *     2            6 10         *     3            10 5 7         *     4            5 7 9 11         *     5            7 9 11         *     6            9 11         *     7            11         *     8            null         *         */        return list;    }}
0 0
原创粉丝点击