zoukankan      html  css  js  c++  java
  • 非递归方法遍历树(前序遍历、中序遍历及后续遍历)

    public List<Integer> preorderTraversal(TreeNode root) {
         List<Integer> res = new ArrayList<>();
         if (root == null) return res;
         LinkedList<TreeNode> stack = new LinkedList<>();
         stack.push(root);
         while (!stack.isEmpty()) {
             TreeNode node = stack.pop();
             res.add(node.val);
             if (node.right != null) stack.push(node.right);
             if (node.left != null) stack.push(node.left);
         }
         return res;
     }
    
     public List<Integer> inorderTraversal(TreeNode root) {
         List<Integer> res = new ArrayList<>();
         if (root == null) return res;
         LinkedList<TreeNode> stack = new LinkedList<>();
         TreeNode currNode = root;
    
         while (currNode != null) {
             stack.push(currNode);
             currNode = currNode.left;
         }
    
         while (!stack.isEmpty()) {
             currNode = stack.pop();
             res.add(currNode.val);
             currNode = currNode.right;
             while (currNode != null) {
                 stack.push(currNode);
                 currNode = currNode.left;
             }
         }
    
         return res;
     }
    
     public List<Integer> postorderTraversal(TreeNode root) {
         List<Integer> res = new LinkedList<>();
         if (root == null) return res;
         LinkedList<TreeNode> nodeStack = new LinkedList<>();
         Set<TreeNode> nodeSet = new HashSet<>();
    
         TreeNode currNode = root;
         while (currNode != null) {
             nodeStack.push(currNode);
             currNode = currNode.left;
         }
    
         while (!nodeStack.isEmpty()) {
             currNode = nodeStack.peek();
             if (currNode.right != null && !nodeSet.contains(currNode.right)) {
                 currNode = currNode.right;
                 while (currNode != null) {
                     nodeStack.push(currNode);
                     currNode = currNode.left;
                 }
             } else {
                 currNode = nodeStack.pop();
                 res.add(currNode.val);
                 nodeSet.add(currNode);
             }
         }
    
         return res;
     }
    
    
  • 相关阅读:
    Oracle客户端安装与配置
    Word VBA(批量复制Excel表格和Word表格到Word中)
    批量追加数据库(GDB,MDB,Shp)
    批量横向打印Excel
    重命名要素类
    删除GIS数据属性值空格(GDB,MDB,Shp)
    删除GIS数据库空层(GDB,MDB,Shape)
    批量裁剪GIS数据(包含GDB,MDB,Shp)
    批量裁剪GDB
    3DS文件导出MultiPatch
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744375.html
Copyright © 2011-2022 走看看