牛客网:二叉树的之字形层序遍历

给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)
例如:
给定的二叉树是{3,9,20,#,#,15,7},


image

该二叉树之字形层序遍历的结果是

[

[3],

[20,9],

[15,7]

]

重要的事情说三遍: 之 型遍历

思路: 二叉树层次遍历的变形题,可以用 dfs 进行层次遍历,当 拿到偶数层的时候,需要将元素 进行反转 存储。


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

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> zigzagLevelOrder (TreeNode root) {
        // write code here
        ArrayList<ArrayList<Integer>> result = new ArrayList<> ();
        
        if(root == null){
            return result;
        }
        dfs(root,result,1);
        return result;
    }
    
    private void dfs(TreeNode root,ArrayList<ArrayList<Integer>> res,int height){
        if(root == null){
            return;
        }
        
        // 如果 height 大于 res.size(), 说明 说明这一层没有对应的集合,需要新创建
        if(height > res.size()){
            res.add(new ArrayList<>());
        }
        
        if(height%2 != 0){
            // 奇数层,直接存放
            res.get(height-1).add(root.val);
        }else{
            //偶数层,需要将拿到的数进行反存储
            res.get(height-1).add(0,root.val);
        }
        
      //对左子树进行遍历
        dfs(root.left,res,height +1);
    //对右子树进行遍历
        dfs(root.right,res,height +1);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • NC15 求二叉树的层序遍历 考过的企业 - 小米 题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到...
    ZackJiang阅读 2,962评论 0 0
  • 二叉树的层序遍历 1.从上到下打印二叉树从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印例如:给...
    懒癌重度患者drive阅读 1,202评论 0 0
  • 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行...
    是我真的是我阅读 1,813评论 0 0
  • 层序遍历就是逐层遍历树结构。 广度优先搜索是一种广泛运用在树或图这类数据结构中,遍历或搜索的算法。 该算法从一个根...
    尼小摩阅读 3,616评论 0 1
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 11,020评论 0 5