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
  • 相关阅读:
    sublime text2 中Emmet常用的技巧 和快捷键
    JS 常用函数
    javascript 事件模型 及 event对象属性总结
    Plant Ecology Journal Club 分享主题和文献列表, 1-7, 2018年秋
    Perl FASTA文件拆分合并
    筛选特定ID的条目信息
    计算可塑性指数RDPI
    【文献摘抄】2018年9月
    重金属在超富集植物与作物间作系统中的植物吸收和富集
    【R统计】主成分分析2——主成分回归
  • 原文地址:https://www.cnblogs.com/echoht/p/3687110.html
Copyright © 2011-2022 走看看