• 非递归方法遍历树(前序遍历、中序遍历及后续遍历)


    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;
     }
    
    
  • 相关阅读:
    PHP伪造referer访问地址
    第一个伪静态(url重写)测试
    url重写(伪静态)IIS配置图解
    两个DropDownList数据绑定联动(数据库)
    PlaceHolder
    Page之IsPostBack属性
    确定删除吗?
    很喜欢的一个组合 因为他们的音乐改变了我对许多事物的看法SAVAGE GARDEN
    DragonBones 骨骼动画引擎
    关于Flash的Sockt通信与跨域文件
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744375.html
Copyright © 2020-2023  润新知