• 39.2: Binary Tree Zigzag Level Order Traversal


     /************************************************************************/
            /*       38:      Binary Tree Zigzag Level Order Traversal                                       */
            /************************************************************************/
            /*
             * Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

    For example:
    Given binary tree {3,9,20,#,#,15,7},

        3
       /
      9  20
        / 
       15   7

    return its zigzag level order traversal as:

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

             * */
            
            /*** 树的按照层遍历 ,类似 BFS***********************************************************/

    public List<List<Integer>> zigzagLevelOrder(TreeNode root) 
            {
                 List<List<Integer>> result = new ArrayList<>();
                    List<TreeNode> level = new ArrayList<>();
                    level.add(root);
                    boolean leftflag=true;
                    while(true){
                        if (level.isEmpty() || level.get(0) == null){
                            break;
                        }
                        List<TreeNode> nextLevel = new ArrayList<>();
                        List<Integer> currentLevel = new ArrayList<>();
                        
                        if(leftflag) //left to right
                        {
                             for (TreeNode node : level){
                                    currentLevel.add(node.val);
                                    if (node.left != null) nextLevel.add(node.left);
                                    if (node.right != null) nextLevel.add(node.right);
                                }
                        }
                        else
                        {
                            for(int i=level.size()-1;i>=0;i--)
                            {
                                currentLevel.add(level.get(i).val);
                                if (level.get(level.size()-1-i).left != null) nextLevel.add(level.get(level.size()-1-i).left);
                                if (level.get(level.size()-1-i).right != null) nextLevel.add(level.get(level.size()-1-i).right);
                            }
                        }
                        result.add(currentLevel);
                        level = nextLevel;
                        leftflag=!leftflag;
                    }
                    return result;
                
            }
  • 相关阅读:
    什么是SQLCLR与使用
    SQL Server中使用正则表达式
    YUV格式
    Android官方开发文档Training系列课程中文版:手势处理之ViewGroup的事件管理
    Android中利用5.0系统屏幕录制UI漏洞骗取应用录制屏幕授权
    Android解析编译之后的所有文件(so,dex,xml,arsc)格式
    PageRank 算法--从原理到实现
    机器人视觉初级系列
    深入解析 iOS 开源项目
    微信热补丁 Tinker 的实践演进之路
  • 原文地址:https://www.cnblogs.com/theonemars/p/4254207.html
Copyright © 2020-2023  润新知