NC14 按之字形顺序打印二叉树

按之字形顺序打印二叉树

https://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0?tpId=188&&tqId=38563&rp=1&ru=/activity/oj&qru=/ta/job-code-high-week/question-ranking

倒序 正序

import java.util.*;

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
public class Solution {
    public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> res = new ArrayList();//用于返回最后的结果
        if(pRoot == null) return res;//如果根节点为空就返回结果
        Deque<TreeNode> que = new LinkedList<TreeNode>();//用于存储每一层的节点

        que.offer(pRoot);
        int layer =0;
        while(!que.isEmpty()){
            ArrayList<Integer> temp = new ArrayList<>();
            int len = que.size();
            for(int i=0;i<len;i++){
                TreeNode node = que.poll();
                if(layer%2==0){
                    temp.add(node.val);
                }else{
                    temp.add(0,node.val);
                }
                if(node.left!=null) que.offer(node.left);
                if(node.right!=null) que.offer(node.right);
            }
            layer++;
            res.add(temp);
        }
                return res;
    }

}

1、add()和offer()区别:

add()和offer()都是向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,调用 add() 方法就会抛出一个 unchecked 异常,而调用 offer() 方***返回 false。因此就可以在程序中进行有效的判断!
2.

public class Solution {
    public ArrayList<ArrayList<Integer> > Print(TreeNode root) {
        ArrayList<ArrayList<Integer>> res = new ArrayList();//用于返回最后的结果
        if(root == null) return res;//如果根节点为空就返回结果
        LinkedList<TreeNode> q = new LinkedList<TreeNode>();//用于存储每一层的节点
        q.add(root);
        int count = 0;
        while(!q.isEmpty()){
            ArrayList<Integer> temp = new ArrayList();
            for(int i=q.size(); i>0; i--){
                TreeNode node = q.poll();
                if(count%2== 0){
                    temp.add(node.val);
                }
                else{
                    temp.add(0,node.val);
                }
                if(node.left!=null) q.offer(node.left);
                if(node.right!=null) q.offer(node.right);
            }
            count++;
            res.add(temp);
        }
        return res;
    }
}
面试题解 文章被收录于专栏

面试题解

全部评论

相关推荐

07-22 11:35
门头沟学院 Java
谁知道这是为什么吗,有没有懂的佬给讲讲
理智的小饼干又熬夜了:鹅打电话问我参不参加后台提前批,说是有的但还没放官网
点赞 评论 收藏
分享
06-23 11:43
门头沟学院 Java
allin校招的烤冷...:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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