zoukankan      html  css  js  c++  java
  • 【LeetCode】103# 二叉树的锯齿形层次遍历

    题目描述

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

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

        3
       / 
      9  20
        /  
       15   7
    

    返回锯齿形层次遍历如下:

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

    解题思路

    考虑到题目需要用折线得方式遍历,就是说在遍历的过程中需要有反向操作,可以联想到使用栈来实现。

    双栈法

    1. 建立两个栈stack1stack2
    2. 把二叉树的根节点pushstack1
    3. 使用一个while循环,pop当前节点的子结点,然后push进另一个栈,这样每处理一个栈,就在最终结果ans里面加一个列表(当前深度的节点)

    源代码

    public List<List<Integer>> zigzagLevelOrder (TreeNode root) {
        List<List<Integer>> ans = new ArrayList<List<Integer>>();
        if (root== null) return ans;
        Stack<TreeNode> stack1 = new Stack<>();
        Stack<TreeNode> stack2 = new Stack<>();
        TreeNode cur = root;
        stack1.push(cur);
        while (!stack1.isEmpty() || !stack2.isEmpty()) {
            List<Integer> temp = new ArrayList<>();
            while (!stack1.isEmpty()) {
                cur = stack1.pop();
                temp.add(cur.val);
                if (cur.left !=null) stack2.push(cur.left);
                if (cur.right !=null) stack2.push(cur.right);
            }
            ans.add(temp);
            temp = new ArrayList<>();
            while (!stack2.isEmpty()) {
                cur = stack2.pop();
                temp.add(cur.val);
                if (cur.right !=null) stack1.push(cur.right);
                if (cur.left !=null) stack1.push(cur.left);
            }
            if (!temp.isEmpty()) {
                ans.add(temp);
            }
        }
        return ans;
    }
    

    心得体会

    一开始只用了一个栈和一个列表来实现,怎么也调不通,后来参考了讨论区的解答,使用双栈,豁然开朗。

  • 相关阅读:
    asp.net 上传文件 显示进度条
    .net 无刷新的几种模式的开发
    使用ASP.NET 2.0提供的WebResource管理资源
    sqlserver2005 递归查询
    利用触发器对某个表的操作过程(删除、修改、插入)
    Sqlserver 先分页再查询
    关于左右滚动,控制某几列不动
    几个不错的SQl语句
    怎样用.net读出Excel的多个Sheet
    将DELPHI数据库连接写进INI配置文件中
  • 原文地址:https://www.cnblogs.com/yuzhenzero/p/10254629.html
Copyright © 2011-2022 走看看