代码随想录 Day11 二叉树 LeetCode T144,145,94 前中后序遍历 (递归解法)

简介: 代码随想录 Day11 二叉树 LeetCode T144,145,94 前中后序遍历 (递归解法)

题解及更详细解答来自于:代码随想录 (programmercarl.com)

前言: 递归三要素

  1. 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。
  2. 确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。
  3. 确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。

LeetCode T144 二叉树的前序遍历

题目链接: 144. 二叉树的前序遍历 - 力扣(LeetCode)

题目思路:

1.确定参数和返回值,我们只需传入一个树节点和一个result数组即可

public void preOrder(TreeNode cur,List<Integer> result)

2.确认终止条件,当我们遍历的节点为空的时候,递归停止

if(cur == null)
    {
        return ;
    }

3.确认单层递归的逻辑:中左右的顺序递归

result.add(cur.val);
preOrder(cur.left,result);
preOrder(cur.right,result);

代码解析:

/**
 * Definition for a binary tree node.
 * 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;
 *     }
 * }
 */
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
      List<Integer> list = new ArrayList<>();
      preOrder(root,list);
      return list;
    }
    public void preOrder(TreeNode cur,List<Integer> result)
    {
        if(cur == null)
        {
            return ;
        }
        result.add(cur.val);
        preOrder(cur.left,result);
        preOrder(cur.right,result);
    }
}

LeetCode T94 二叉树的中序遍历

题目链接: 94. 二叉树的中序遍历 - 力扣(LeetCode)

题目思路:

1.确定参数和返回值,我们只需传入一个树节点和一个result数组即可

public void inOrder(TreeNode cur,List<Integer> result)

2.确认终止条件,当我们遍历的节点为空的时候,递归停止

if(cur == null)
    {
        return ;
    }

3.确认单层递归的逻辑:左中右的顺序递归

inOrder(cur.left,result);
        result.add(cur.val);
        inOrder(cur.right,result);

代码解析:

/**
 * Definition for a binary tree node.
 * 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;
 *     }
 * }
 */
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        inOrder(root,result);
        return result;
    }
    public void inOrder(TreeNode cur,List<Integer> result)
    {
        if(cur == null)
        {
            return ;
        }
        inOrder(cur.left,result);
        result.add(cur.val);
        inOrder(cur.right,result);
    }
}

LeetCode T145 二叉树的后序遍历

题目链接: 145. 二叉树的后序遍历 - 力扣(LeetCode)

题目思路:

 1.确定参数和返回值,我们只需传入一个树节点和一个result数组即可

public void postOrder(TreeNode cur,List<Integer> result)

2.确认终止条件,当我们遍历的节点为空的时候,递归停止

if(cur == null)
    {
        return ;
    }

3.确认单层递归的逻辑:左中右的顺序递归

postOrder(cur.left,result);
        postOrder(cur.right,result);
        result.add(cur.val);

代码解析:

/**
 * Definition for a binary tree node.
 * 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;
 *     }
 * }
 */
class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        postOrder(root,result);
        return result;
    }
    public void postOrder(TreeNode cur,List<Integer> result)
    {
        if(cur == null)
        {
            return;
        }
        postOrder(cur.left,result);
        postOrder(cur.right,result);
        result.add(cur.val);
    }
}
相关文章
|
3天前
|
存储 算法
二叉树进阶-学会层序遍历助你一次刷完leetcode10道题
文章深入探讨了二叉树的层序遍历方法,并展示了如何通过队列实现层序遍历的算法逻辑,同时指出掌握层序遍历技巧可以帮助解决LeetCode上的多道相关题目。
二叉树进阶-学会层序遍历助你一次刷完leetcode10道题
|
3天前
|
算法 Java
LeetCode第94题二叉树的中序遍历
文章介绍了LeetCode第94题"二叉树的中序遍历"的解法,使用递归实现了中序遍历的过程,遵循了"左根右"的遍历顺序,并提供了清晰的Java代码实现。
LeetCode第94题二叉树的中序遍历
|
4天前
|
存储
LeetCode------递归(爬楼梯)
这篇文章通过LeetCode上的"爬楼梯"问题介绍了递归的基本概念和实现方法,包括递归公式的推导、基本递归实现、使用备忘录优化以避免重复计算,以及自底向上的迭代方法来提高效率。
LeetCode------递归(爬楼梯)
|
11天前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
27 6
|
11天前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
25 1
|
11天前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
22 1
|
11天前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
29 0
|
11天前
|
算法 Java
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
22 0
|
11天前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
18 0
|
11天前
|
存储 算法 Java
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
10 0