代码随想录-44-144. 二叉树的前序遍历、44-94. 二叉树的中序遍历、45-145. 二叉树的后序遍历(非统一迭代法)

目录

  • 前言
    • 题目
  • 1.递归的思想
      • 思路(定义变量)
      • 通解思路
    • 2. 本题思路分析:
    • 3. 算法实现
    • 4. pop函数的算法复杂度
    • 5. 算法坑点

前言

在本科毕设结束后,我开始刷卡哥的“代码随想录”,每天一节。自己的总结笔记均会放在“算法刷题-代码随想录”该专栏下。
代码随想录此题链接

题目

1.递归的思想

思路(定义变量)

  • TreeNode 树节点的类
  • ArrayDeque 作为遍历栈
  • 封装结果的List

通解思路

2. 本题思路分析:

3. 算法实现

  • 代码:
    统一的树节点类
public class TreeNode {
     int val;
     TreeNode left;
     TreeNode right;
     TreeNode() {}
     TreeNode(int val) { this.val = val; }
     TreeNode(int val, TreeNode left, TreeNode right) {
         this.val = val;
         this.left = left;
         this.right = right;
     }
}

前序

public List<Integer> preorderTraversal(TreeNode root) {
    List<Integer> result = new ArrayList<>();
    Deque<TreeNode> stack = new ArrayDeque<>();
    if(root == null){
        return result;
    }
    stack.push(root);
    while(!stack.isEmpty()){
        TreeNode cur = stack.pop();
        result.add(cur.val);
        if(cur.right != null){
            stack.push(cur.right);
        }
        if(cur.left != null){
            stack.push(cur.left);
        }
    }
    return result;
}

中序

public List<Integer> inorderTraversal(TreeNode root) {
    List<Integer> result = new ArrayList();
    Deque<TreeNode> stack = new ArrayDeque();
    TreeNode cur = root;
    while(!stack.isEmpty() || cur != null){
        if(cur != null){
            stack.push(cur);
            cur = cur.left;
        }else{
            cur = stack.pop();
            result.add(cur.val);
            cur = cur.right;
        }
    }
    return result;
}

后序

public List<Integer> postorderTraversal(TreeNode root) {
    List<Integer> result = new ArrayList();
    if(root == null){
        return result;
    }
    Deque<TreeNode> stack = new ArrayDeque();
    stack.push(root);
    TreeNode cur = new TreeNode();
    while(!stack.isEmpty()){
        cur = stack.pop();
        result.add(cur.val);
        if(cur.left != null){
            stack.push(cur.left);
        }
        if(cur.right != null){
            stack.push(cur.right);
        }
    }
    Collections.reverse(result);
    return result;
}

4. pop函数的算法复杂度

5. 算法坑点

你可能感兴趣的:(算法,java,数据结构)