zoukankan      html  css  js  c++  java
  • LeetCode OJ

    二叉树的三种遍历,我之前写过这个的迭代实现,详见 这里

    下面是Leetcode这道题的AC代码,同样采用迭代方法,但是我用了一个ArrayList去记录已经出栈的节点,这样当我考察栈顶节点是否直接弹出时,只要看它是否有左右子节点或者是它的左右子节点是否已经被弹出。这种方法可能在时间复杂度上更高。

     1 /**
     2      * 后序遍历
     3      * @param root
     4      * @return
     5      */
     6     public ArrayList<Integer> postOrderTraversal(TreeNode root)
     7     {
     8         ArrayList<Integer> r = new ArrayList<Integer>();
     9         if(root == null)
    10             return null;
    11         LinkedList<TreeNode> stack = new LinkedList<TreeNode>();
    12         
    13         ArrayList<TreeNode> tr = new ArrayList<TreeNode>();
    14         stack.push(root);
    15         while(!stack.isEmpty())
    16         {
    17             TreeNode temp = stack.peek();
    18             if((temp.left == null && temp.right == null) ||
    19                     tr.contains(temp.left) || tr.contains(temp.right))
    20             {
    21                 stack.pop();
    22                 r.add(temp.val);
    23                 tr.add(temp);
    24             }else {
    25                 if(temp.right!=null)
    26                     stack.push(temp.right);
    27                 if(temp.left!=null)
    28                     stack.push(temp.left);
    29             }
    30         }
    31         return r;
    32     }
    33     /**
    34      * 先序遍历
    35      * @param root
    36      * @return
    37      */
    38     public ArrayList<Integer> preorderTraversal(TreeNode root)
    39     {
    40         if(root == null)
    41             return null;
    42         LinkedList<TreeNode> stack = new LinkedList<TreeNode>();
    43         ArrayList<Integer> r = new ArrayList<Integer>();
    44         stack.push(root);
    45         while(!stack.isEmpty()){
    46             TreeNode temp = stack.pop();
    47             r.add(temp.val);
    48             if(temp.right!=null)
    49                 stack.push(temp.right);
    50             if(temp.left!=null)
    51                 stack.push(temp.left);
    52         }
    53         return r;
    54     }
    有问题可以和我联系,bettyting2010#163 dot com
  • 相关阅读:
    vs2017 项目调试浏览器网页闪退Bug
    “WebPageBase”在未引用的程序集中定义。必须添加对程序集“System.Web.WebPages, Version=1.0.0.0,Culture=neutral....."的引用
    SQL Server判断日期是否为周六 周日
    获取各国的日期时间
    .net Api项目初步搭建并移除XML格式
    鼠标滚轮事件
    js中if表达式判断规则
    原生轮播图
    C# uri
    SqlServer 备份还原教程
  • 原文地址:https://www.cnblogs.com/echoht/p/3687110.html
Copyright © 2011-2022 走看看