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;
     }
    
    
  • 相关阅读:
    抽象类 接口 抽象方法 虚方法【基本说明】
    安装mongoDB
    django配置templates、static、media和连接mysql数据库
    python虚拟环境virtualenv下安装MySQLpython
    django中widget小部件
    django使用mongodb建表
    thinkphp5使用redis
    python虚拟环境virtualenv
    php开启redis扩展
    纯CSS的下拉菜单
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744375.html
Copyright © 2011-2022 走看看