题解 | #二叉树的之字形层序遍历#

二叉树的之字形层序遍历

http://www.nowcoder.com/practice/47e1687126fa461e8a3aff8632aa5559

思路:和广度优先搜索一样的思路,只是每隔一层需要将元素倒置,这里只需使用ArrayList的头插法即可。

    public ArrayList<ArrayList<Integer>> zigzagLevelOrder (TreeNode root) {
        if(root==null ) return new ArrayList<>();
        ArrayList<ArrayList<Integer>> result=new ArrayList<>();   //返回result,存储每层节点
        Queue<TreeNode> queue=new LinkedList<>();
        queue.add(root);    //放入根节点

        int level=1;  //定义层数,根节点为第一层
        while(!queue.isEmpty()){
            ArrayList<Integer> arr=new ArrayList<>();     //放置每一层节点的动态数组,每次循环将被重置

            //计数每层的节点,进行循环放入ArrayList数组中
            int levelNum=queue.size();  
            for(int i=0;i<levelNum;i++){
                TreeNode node=queue.poll();

                //判断是奇数层还是偶数层,偶数层需要使用头插法
                if(level%2!=0){
                arr.add(node.val);
                }else{
                    arr.add(0,node.val);
                }
                //加入节点的左右子树
                if(node.left!=null) queue.add(node.left);
                if(node.right!=null) queue.add(node.right);
            }
            result.add(arr);
            level++;    //一层增加一
        }    
        return result;
    }
}
全部评论

相关推荐

zzzzhz:兄弟你先猛猛投简历至少三百家,能约到面试就去面。最近可以速成智能小车,智慧家居烂大街的项目,不需要自己写,只需要把里面的代码讲解看明白就行。把其中涉及到的八股文都拿出来单独背一下,我去年找工作就一个智能小车智慧家居找了10k差不多。
点赞 评论 收藏
分享
06-07 19:59
门头沟学院 C++
补药卡我啊😭:都快15年前的了还在11新特性
你的简历改到第几版了
点赞 评论 收藏
分享
07-17 12:14
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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