数据结构——二叉树层序遍历
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构——二叉树层序遍历相关的知识,希望对你有一定的参考价值。
层序遍历,即宽度优先遍历,在本算法中,我们还需要将每一层进行分开打印,
对于上图所示的二叉树,我们希望打印出的结果是:
1
2 3
4 5 6
7 8
首先,我们看一下二叉树节点是什么样的:
class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }
具体实现中,我们采用last表示当前打印的行的最后一个元素的引用,nlast表示下一行最后一个元素的引用。然后我们借助队列来进行展开工作:
1 import java.util.ArrayList; 2 import java.util.LinkedList; 3 import java.util.List; 4 5 public class Tree { 6 7 public int[][] printTree(TreeNode root) { 8 if (root == null) { 9 return null; 10 } 11 TreeNode last = root; 12 TreeNode nlast = root; 13 List<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); 14 ArrayList<Integer> list = new ArrayList<Integer>() ; 15 LinkedList<TreeNode> quene = new LinkedList<TreeNode>(); 16 quene.offer(root); 17 TreeNode temp ; 18 while(!quene.isEmpty()){ 19 temp = quene.poll(); 20 list.add(temp.val); 21 if (temp.left != null) { 22 quene.offer(temp.left); 23 nlast = temp.left; 24 } 25 if (temp.right != null) { 26 quene.offer(temp.right); 27 nlast = temp.right; 28 } 29 if(temp == last){ 30 last = nlast ; 31 res.add(list) ; 32 list = new ArrayList<Integer>() ; 33 } 34 } 35 36 int [][] re = new int [res.size()][] ; 37 for(int i = 0 ; i < res.size() ; i++){ 38 re[i] = new int [res.get(i).size()] ; 39 for(int j = 0; j < res.get(i).size(); j++){ 40 re[i][j] = res.get(i).get(j); 41 } 42 } 43 44 return re ; 45 46 } 47 }
以上是关于数据结构——二叉树层序遍历的主要内容,如果未能解决你的问题,请参考以下文章