二叉树层次遍历(剑指Offer面试题32:从上到下打印二叉树)

图1所示为二叉树的层次遍历,即按照箭头所指方向,按照1、2、3的层次顺序,对二叉树每个节点进行访问

(此图反映的是自左至右的层次遍历,自右至左的方式类似)。

要进行层次遍历,需要建立一个队列。先将二叉树头节点入队列,然后出队列,访问该节点,

如果它有左子树,则将左子树的根结点入队;如果它有右子树,则将右子树的根结点入队。然后出队列,对出队节点访问,

如此反复直到队列为空为止。

 1 import java.util.*;
 2 class TreeNode
 3 {
 4     int val;
 5     TreeNode left;
 6     TreeNode right;
 7     TreeNode(int val) {
 8         this.val=val;
 9     }
10 }
11 class Solution
12 {
13     public void level(TreeNode head) {
14         Queue<TreeNode> queue=new LinkedList<TreeNode>();
15         if(head!=null) {
16             queue.offer(head);
17             while(queue.size()!=0) {
18                 TreeNode node=queue.poll();
19                 System.out.println(node.val);
20                 if(node.left!=null) {
21                     queue.offer(node.left);
22                 }
23                 if(node.right!=null) {
24                     queue.offer(node.right);
25                 }
26             }
27         }
28     }
29     public static void main(String[] args) {
30         Solution s=new Solution();
31         TreeNode head=new TreeNode(1);
32         head.left=new TreeNode(3);
33         head.right=new TreeNode(4);
34         head.left.left=new TreeNode(6);
35         head.left.right=new TreeNode(5);
36         s.level(head);
37     }
38
39 }

剑指Offer 面试题32:

题目描述:

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

以下为测试通过程序:

 1 import java.util.*;
 2 /**
 3 public class TreeNode {
 4     int val = 0;
 5     TreeNode left = null;
 6     TreeNode right = null;
 7
 8     public TreeNode(int val) {
 9         this.val = val;
10
11     }
12
13 }
14 */
15 class Solution
16 {
17     public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
18         Queue<TreeNode> queue=new LinkedList<TreeNode>();
19         ArrayList<Integer> list=new ArrayList<Integer>();
20
21         if(root!=null) {
22             queue.offer(root);
23             while(queue.size()!=0) {
24                 TreeNode node=queue.poll();
25                 list.add(node.val);
26                 if(node.left!=null) {
27                     queue.offer(node.left);
28                 }
29                 if(node.right!=null) {
30                     queue.offer(node.right);
31                 }
32             }
33         }
34         return list;
35     }
36 }

欢迎评论!!

原文地址:https://www.cnblogs.com/hengzhezou/p/11038265.html

时间: 2024-11-07 13:33:31

二叉树层次遍历(剑指Offer面试题32:从上到下打印二叉树)的相关文章

剑指offer(三十七)之从上往下打印二叉树

题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路分析:使用两个LIST,一个存放节点,一个存放值.先将根节点加入到LIST中,然后遍历LIST中的元素,遍历过程中,访问该元素的左右节点,再将左右子节点加入到LIST中来 <span style="font-family:SimSun;font-size:18px;color:#3333ff;">import java.util.ArrayList; /** public class TreeNode {

【剑指Offer】22、从上往下打印二叉树

题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题解:LinkedList模拟队列 1 public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { 2 ArrayList<Integer> list = new ArrayList<>(); 3 if (root == null) { 4 return list; 5 } 6 LinkedList<TreeNode> que

剑指offer系列源码-从上往下打印二叉树

从上往下打印出二叉树的每个节点,同层节点从左至右打印. #include <iostream> #include<stdio.h> #include<deque> using namespace std; struct BinaryTreeNode{ int value; BinaryTreeNode* left; BinaryTreeNode* right; }; void printFromTopToBottom(BinaryTreeNode* root){ if(

剑指offer——32从上到下打印二叉树

题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 题解: 就是简单的层序遍历 1 class Solution { 2 public: 3 vector<int> PrintFromTopToBottom(TreeNode* root) { 4 vector<int>res; 5 BFS(root, res); 6 return res; 7 } 8 void BFS(TreeNode *root, vector<int>&res) 9 { 10

面试题:从上往下打印二叉树

题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印. 树的按层遍历 思路:辅助队列保存每个节点的子节点值 import java.util.ArrayList; import java.util.Queue; import java.util.LinkedList; public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer&

剑指Offer面试题25(Java版):二叉树中和为某一值的路径

题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶结点所经过的所有的结点形成一条路径. 如下图,输入二叉树和整数22,则打印出两条路径,第一条路径包含结点10,12,第二条路径包含的结点为10,5,7. 一般的数据结构和算法的教材都没有介绍树的路径,因此对大多数应聘者而言,这是一个新概念,也就很难一下子想出完整的解题思路.这个时候我们可以试着从一两个具体的例子入手,找到规律. 以图中的二叉树为例分析,由于路径是从根节点出发到叶结点,也就是说

剑指offer(五十三)之按之字形顺序打印二叉树

题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 代码: <span style="color:#000099;">import java.util.ArrayList; import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = n

剑指Offer面试题39(Java版):二叉树的深度

题目:输入一棵二叉树的根节点,求该数的深度.从根节点到叶结点依次进过的结点(含根,叶结点)形成树的一条路径,最长路径的长度为树的深度. 例如,如下图的二叉树的深度为4,因为它从根节点到叶结点的最长的路径包含4个结点(从根结点1开始,经过2和结点5,最终到达叶结点7) 我们可以从另一种角度来理解树的深度.如果一棵树只有一个结点,它的深度为1,如果根节点只有左子树而没有右子树,那么树的深度应该是其左子树的深度+1.同样如果根节点只有右子树而没有左子树,那么树的深度应该是其右子树+1.如果既有左子树又

剑指Offer面试题19(Java版):二叉树的镜像

题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像 二叉树的结构定义为: package utils; public class BinaryTreeNode { public int value; public BinaryTreeNode leftNode; public BinaryTreeNode rightNode; public BinaryTreeNode(){ } public BinaryTreeNode(int value){ this.value = value ;