• 二叉树中序遍历


    http://www.lintcode.com/en/problem/binary-tree-inorder-traversal/

    注意点: 看不明白的话,先拿二叉树按代码的逻辑跑一遍。

        栈中先放root的左子树,之后清空后放右子树。

        非递归:    

        while(!s.empty() || temp != null) {
          while(temp != null) {           
            s.push(temp);
            temp = temp.left;            //while循环加下面的这系列操作相当于在result中存放左结点和root
          }
          temp = s.pop();          //相当于result中存放左结点和root
          result.add(temp.val);        //相当于result中存放左结点和root
          temp = temp.right;      //在result中存放右结点
        }

     1  //分治
     2  public ArrayList<Integer> inorderTraversal(TreeNode root) {
     3      ArrayList<Integer> result = new ArrayList<Integer>();
     4      if(root == null) return result;
     5     
     6      ArrayList<Integer> left = inorderTraversal(root.left);
     7      ArrayList<Integer> right = inorderTraversal(root.right);
     8      result.addAll(left);
     9      result.add(root.val);
    10      result.addAll(right);
    11      return result;
    12      
    13  }
    14  //非递归
    15  public ArrayList<Integer> inorderTraversal(TreeNode root) {
    16     Stack<TreeNode> stack = new Stack<TreeNode>();
    17     ArrayList<Integer> result = new ArrayList<Integer>();
    18     if(root == null) return result;
    19     TreeNode temp = root;
    20     //temp == null 表示此分支为null,不再需要往stack里添加结点,而是直接取出结点
    21     while(!stack.empty() || temp != null){
    22         while(temp != null) {
    23             stack.push(temp);
    24             temp = temp.left;
    25         }
    26         temp = stack.pop();
    27         result.add(temp.val);
    28         //temp != null,则相当于对右子树进行之前root的入栈操作 
    29         temp = temp.right;  
    30     }
    31     return result;    
    32  }
    33  
    34  //游走遍历, 要返回的结果一直作为参数在传递
    35  public ArrayList<Integer> inorderTraversal(TreeNode root) {
    36         ArrayList<Integer> result = new ArrayList<Integer>();
    37         return    traverse(root, result);
    38   }
    39  private ArrayList<Integer> traverse(TreeNode root, ArrayList<Integer> result) {
    40      if(root == null) return result;
    41      traverse(root.left, result);
    42      result.add(root.val);
    43      traverse(root.right, result);
    44      return result;
    45  }
    View 
  • 相关阅读:
    DPDK安装方法 17.12.13
    numa.h:No such file or directory 解决方法
    17秋 软件工程 第六次作业 Beta冲刺 Scrum3
    17秋 软件工程 第六次作业 Beta冲刺 总结博客
    17秋 软件工程 第六次作业 Beta冲刺 Scrum2
    Paper Reviews and Presentations
    17秋 软件工程 第六次作业 Beta冲刺 Scrum1
    17秋 软件工程 第六次作业 Beta冲刺
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted
    17秋 软件工程 个人作业 软件产品案例分析
  • 原文地址:https://www.cnblogs.com/ddcckkk/p/6813912.html
Copyright © 2020-2023  润新知