zoukankan      html  css  js  c++  java
  • 二叉树中序遍历

    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 
  • 相关阅读:
    论文阅读笔记(四)【TIP2017】:Video-Based Pedestrian Re-Identification by Adaptive Spatio-Temporal Appearance Model
    论文阅读目录
    【学习】从.txt文件读取生成编译代码。
    页面显示其他电脑图片(局域网)
    控制台爬取小说(大王饶命)
    【自学】大话设计模式控制台
    将PDF转化为wrod
    【学习】爬糗事百科,可自动翻页。
    AHP(使用于某项目设备重要度评估测试)
    【学习】类重构、通用值交换、释放内存计算时间等
  • 原文地址:https://www.cnblogs.com/ddcckkk/p/6813912.html
Copyright © 2011-2022 走看看