把二叉树打印成多行(利用队列的先进先出)

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

思考与上一道之字形打印二叉树的区别 

这个是每一行的方向一样

先添加一层,然后把这层的节点从左到右的添加进去,只能用队列,这样下次添加的时候利用队列的先进先出原则,首先取出的时上一层最左边的节点,再依次添加,遍历队列借助Iterator。

刚开始利用栈,顺序弄不到,这一道与上一道很好的区别的栈和队列的区别。

之前用对列较少,

队列Queue是一个接口,表示一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用,还有优先级队列PriorityQueue也是Queue的实现类

PriorityQueue是按照队列元素的大小进行重新排序,当调用peek()或者是poll()的方法取出队列中的元素通常都是最小的元素。

  • 自然排序:集合中的元素必须实现Comparable接口,而且应该是同一个类的多个实例,否则可能导致ClassCastException异常。
  • 定制排序:创建队列时,传入一个Comparator对象,该对象负责对队列中的所有元素进行排序。采用定制排序时不需要元素实现Comparable接口。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;

class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
public class Solution {

	ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
		ArrayList<ArrayList<Integer>> res = new ArrayList<>();
		if(pRoot==null){
			return res;
		}
		Queue<TreeNode> q = new LinkedList<TreeNode>();
		q.add(pRoot);
		while(!q.isEmpty()){
			int cur=0;
			int size=q.size();
			ArrayList<Integer> value=new ArrayList<>();
			Iterator<TreeNode> it=q.iterator();
			while(it.hasNext()){
				value.add(it.next().val);
			}
			res.add(value);
			while(cur<size){
				TreeNode node=q.poll();
				if(node.left!=null)q.add(node.left);
				if(node.right!=null)q.add(node.right);
				cur++;
			}
		}
		return res;
		
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值