剑指offer面试题23:从上往下打印二叉树 Java实现
2016-09-11 11:16
267 查看
题目:从上往下打印二叉树
题目:从上往下打印出二叉树的每个节点,同一层的节点按照从左到右的书序打印。例如:下面二叉树打印出 1,2,3,4,5,6.
1
/ \
2 3
/ \ \
4 5 6
算法分析:
每次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的节点,重复前面的打印操作,直到队列中所有的节点都被打印出来为止。
步骤1.打印节点1;队列中有节点:2,3
步骤2.打印节点2;队列中有节点:3,4,5,
步骤3.打印节点3;队列中有节点:4,5,6
步骤4.打印节点4;队列中有节点:5,6
步骤5.打印节点5;队列中有节点6
步骤6.打印节点6;完毕。
源程序:
题目:从上往下打印出二叉树的每个节点,同一层的节点按照从左到右的书序打印。例如:下面二叉树打印出 1,2,3,4,5,6.
1
/ \
2 3
/ \ \
4 5 6
算法分析:
每次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的节点,重复前面的打印操作,直到队列中所有的节点都被打印出来为止。
步骤1.打印节点1;队列中有节点:2,3
步骤2.打印节点2;队列中有节点:3,4,5,
步骤3.打印节点3;队列中有节点:4,5,6
步骤4.打印节点4;队列中有节点:5,6
步骤5.打印节点5;队列中有节点6
步骤6.打印节点6;完毕。
源程序:
/************************************************************** * Copyright (c) 2016, * All rights reserved. * 版 本 号:v1.0 * 题目描述:从上往下打印二叉树 * 题目:从上往下打印出二叉树的每个节点,同一层的节点按照从左到右的书序打印。 * 例如:下面二叉树打印出 1,2,3,4,5,6. * 1 * / \ * 2 3 * / \ \ * 4 5 6 * * 输入描述: * 程序输出: * 问题分析: * 算法描述: 每次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾。接下来到队列的头部 * 取出最早进入队列的节点,重复前面的打印操作,直到队列中所有的节点都被打印出来为止。 * 步骤1.打印节点1;队列中有节点:2,3 * 步骤2.打印节点2;队列中有节点:3,4,5, * 步骤3.打印节点3;队列中有节点:4,5,6 * 步骤4.打印节点4;队列中有节点:5,6 * 步骤5.打印节点5;队列中有节点6 * 步骤6.打印节点6;完毕。 * 完成日期:2016-09-11 ***************************************************************/ package org.marsguo.offerproject23; import java.util.*; class TreeNode{ int val; public TreeNode left = null; public TreeNode right = null; public TreeNode(int val){ this.val = val; } } public class PrintFromTopToBottom { /*方法1,二叉树的层次遍历,借助一个队列实现*/ public ArrayList<Integer> PrintMethod1(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 treeNode = queue.poll(); if(treeNode.left != null){ queue.offer(treeNode.left); } if(treeNode.right != null){ queue.offer(treeNode.right); } list.add(treeNode.val); } return list; } /*方法2,采用两个队列,队列listNode用于存放节点,队列listVal用于存放值。 先将根节点加入到队列中,然后遍历队列中的元素,遍历过程中,访问该元素 左右节点,再将左右子节点加入到队列中来。*/ public ArrayList<Integer> PrintMethod2(TreeNode root){ ArrayList<TreeNode> listNode = new ArrayList<TreeNode>(); ArrayList<Integer> listVal = new ArrayList<Integer>(); if(root == null){ return listVal; } listNode.add(root); //先将根节点和根节点的值放入队列中, listVal.add(root.val); for(int i = 0; i < listNode.size();i++){ //实现遍历,或用语句 while(listNode.size() != 0) 实现 TreeNode node = listNode.get(i); //listNode.get(0)得到集合中第一个元素 if(node.left != null){ //listNode.get(i)得到集合的第i+1个元素,并赋给node. listNode.add(node.left); //在遍历过程中,访问该元素的左节点,并将左节点 listVal.add(node.left.val); //和左节点的值分别加入队列中。 } if(node.right != null){ listNode.add(node.right); //在遍历过程中,访问该元素的左节点,并将左节点 listVal.add(node.right.val); //和左节点的值分别加入队列中。 } } return listVal; } }
相关文章推荐
- 剑指Offer:面试题23——从上往下打印二叉树(java实现)
- 剑指offer 面试题23 从上往下打印二叉树 Java实现
- 剑指offer--面试题23:从上往下打印二叉树--Java实现
- 《剑指offer》(面试题23):从上往下打印二叉树
- 剑指offer-面试题23.从上往下打印二叉树
- 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
- 剑指offer之面试题23:从上往下打印二叉树
- 剑指offer面试题23:从上往下打印二叉树
- 剑指Offer面试题23(Java版):从上往下打印二叉树
- 剑指Offer面试题23(Java版):从上往下打印二叉树
- JAVA实现从上往下打印二叉树(《剑指offer》)
- 《剑指offer》面试题23 从上往下打印二叉树
- 《剑指Offer》学习笔记--面试题23:从上往下打印二叉树
- 剑指offer--面试题23:从上往下打印二叉树
- 剑指offer_面试题_从上往下打印二叉树
- 剑指offer面试题java实现之题6:重建二叉树
- 剑指offer刷题之java实现的从上往下打印二叉树
- 剑指offer——面试题23:从上往下打印二叉树(树的递归创建,广度优先搜索,队列)
- 面试题:23从上往下打印二叉树
- (剑指Offer)面试题23:从上到下打印二叉树