Javat通过BFS解法

按之字形顺序打印二叉树

http://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d2efbe0

实现思路:

  1. 主要的方法与BFS写法没什么区别
  2. BFS里是每次只取一个,而我们这里先得到队列长度size,这个size就是这一层的节点个数,然后通过for循环去poll出这size个节点,这里和按行取值二叉树返回ArrayList<ArrayList<Integer>>这种题型的解法一样,之字形取值的核心思路就是通过两个方法:
    • list.add(T): 按照索引顺序从小到大依次添加
    • list.add(index, T): 将元素插入index位置,index索引后的元素依次后移,这就完成了每一行元素的倒序,或者使用Collection.reverse()方法倒序也可以
import java.util.LinkedList;
public class Solution {
    public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        LinkedList<TreeNode> q = new LinkedList<>();
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        boolean rev = true;
        q.add(pRoot);
        while(!q.isEmpty()){
            int size = q.size();
            ArrayList<Integer> list = new ArrayList<>();
            for(int i=0; i<size; i++){
                TreeNode node = q.poll();
                if(node == null){continue;}
                if(rev){
                    list.add(node.val);
                }else{
                    list.add(0, node.val);
                }
                q.offer(node.left);
                q.offer(node.right);
            }
            if(list.size()!=0){res.add(list);}
            rev=!rev;
        }
        return res;
    }
}
全部评论
这种做法,Arraylist在每次把数插入头部的时候,数组元素全部会往后挪,更好的方式是使用双向队列
点赞 回复 分享
发布于 2021-08-18 16:05
if(node==null){continue};为什么会有为空的情况啊,不是有几个节点就循环几次吗?
点赞 回复 分享
发布于 2020-03-31 22:08

相关推荐

09-10 11:50
门头沟学院 Java
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
09-09 15:13
李涛一下,如果只有大厂title但是全是dw,你们会去吗没有大厂的话对秋招影响大吗
代码不跑我跑_秋招版:你就不能做到既有title又包装得产出不错么,包装也是筛选人的一步。
点赞 评论 收藏
分享
评论
52
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务