图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