zoukankan      html  css  js  c++  java
  • [leetcode]103. Binary Tree Zigzag Level Order Traversal二叉树Z字形层序遍历

    相对于102题,稍微改变下方法就行

    迭代方法:

    在102题的基础上,加上一个变量来判断是不是需要反转

    反转的话,当前list在for循环结束后用collection的反转方法就可以实现反转

    递归方法:

    由于有层数,所以用层数%2判断是不是需要反转

    反转的话就元素都添加到最前边,一层添加完后就是反的

    下边是递归方法

    List<List<Integer>> res = new ArrayList<>();
        public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
            /*
            递归方法是判断当前层是否需要反转
            反转层添加方法:元素总是添加到第一个,这样就相当于反转了
            非反转层正常添加
             */
            helper(root,0);
            return res;
        }
        public void helper(TreeNode root,int c)
        {
            if (root==null)
                return;
            if (res.size()==c)
                res.add(new ArrayList<>());
            List<Integer> cur = res.get(c);
            if (c%2==0) cur.add(root.val);
            else cur.add(0,root.val);
            if (root.left!=null)
                helper(root.left,c+1);
            if (root.right!=null)
                helper(root.right,c+1);
        }

    这个题一开始没做出来是因为:

    觉得反转的情况应该反向添加(递归)节点,但是发现不行,因为如果反向添加(递归)节点,那么下个节点就会全部自动反向

    应该是反向添加数值,节点的遍历顺序不能动

  • 相关阅读:
    leetcode刷题-131~
    leetcode刷题-106~114/116~122/125/127/129~130
    leetcode刷题-100~105
    Intel-Pin的windows安装
    九、appium自动化框架综合实践
    QQ传文件用例设计
    mysql常用语句
    谐云试用的日子
    码农开发资料集
    MyBatis中一个SQL语句的执行过程解析
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8334353.html
Copyright © 2011-2022 走看看