• 二叉树的z形遍历


      public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
            List<List<Integer>> result = new LinkedList<>();
     
            if (root == null) {
                return result;
            }
            // 遍历标志,0表示从左到右,1表示从右到左
            int flag = 0;
            TreeNode node;
            // 记录每一层的元素
            List<Integer> lay = new LinkedList<>();
            // 双向队列,当作栈来使用,记录当前层待处理结点
            Deque<TreeNode> stack = new LinkedList<>();
            // 记录下一层待处理结点
            Deque<TreeNode> nextStack = new LinkedList<>();
     
            stack.add(root);
     
            while (!stack.isEmpty()) {
                // 删除栈顶元素
                node = stack.removeLast();
     
                // 结果入队
                lay.add(node.val);
     
                // 如果当前是从左到右遍历,按左子树右子树的顺序添加
                if (flag == 0) {
                    if (node.left != null) {
                        nextStack.addLast(node.left);
                    }
     
                    if (node.right != null) {
                        nextStack.addLast(node.right);
                    }
                }
                // 如果当前是从右到左遍历,按右子树左子树的顺序添加
                else {
                    if (node.right != null) {
                        nextStack.addLast(node.right);
                    }
     
                    if (node.left != null) {
                        nextStack.addLast(node.left);
                    }
                }
     
                // 当前层已经处理完了
                if (stack.isEmpty()) {
                    Deque<TreeNode> temp = nextStack;
                    nextStack = stack;  //下一个栈清空
                    stack = temp;//本栈置为下一个栈
     
                    // 标记下一层处理的方向
                    flag = 1 - flag;
                    // 保存本层结果
                    result.add(lay);
                    // 创建新的链表处理下一层的结果
                    lay = new LinkedList<>();
                }
            }
     
            return result;
        }
  • 相关阅读:
    HTML if条件注释解读
    Springboot整合logback日志系统
    Springboot @Valid 参数校验
    JDK1.8 版的if else
    Android获取手机定位坐标
    CentOS8安装JDK
    Vue全局配置文件
    git学习
    百度前端面试题—基础
    前端知识网络
  • 原文地址:https://www.cnblogs.com/zzq-include/p/14234326.html
Copyright © 2020-2023  润新知