leetcode103 二叉树锯齿层次遍历

题目:给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

例如:
给定二叉树 [3,9,20,null,null,15,7],

3

/
9 20
/
15 7
返回锯齿形层次遍历如下:

[
[3],
[20,9],
[15,7]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
    
    
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) 
    {
    
       
        if(root==null){
    
            //在空树情况下,直接返回空List
            List<List<Integer>>lists =new ArrayList<>();
            return lists;
        }
        help(root,0);
        return list;
    }
    List<List<Integer>>list =new ArrayList<>();//创建list存储遍历结果
    private void help(TreeNode root, int lev){
    
    
        if(root==null){
    
    
            return ;   //节点为空时返回
        }
        if(list.size()-1<lev){
    
      //判断当前层数对应的list是否存在,如果不存在,则新建一个list1加入list中
            List<Integer>list1 = new ArrayList();
            list.add(list1);
        }
        if(lev%2==0){
    
       //偶数层,直接按中根遍历,从左到右将节点值加入对应层数的list的尾部
           help(root.left,lev+1);
           list.get(lev).add(root.val);
           help(root.right,lev+1);
        }else{
    
              //奇数层,中根遍历,但我们将本次节点的值插入至list的头部,得到倒序的遍历结果,即从右至左
           help(root.left,lev+1);
           list.get(lev).add(0,root.val);
           help(root.right,lev+1);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45789385/article/details/103447790