代码随想录 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);
    }
}
相关文章
|
2月前
【LeetCode 31】104.二叉树的最大深度
【LeetCode 31】104.二叉树的最大深度
28 2
|
2月前
【LeetCode 29】226.反转二叉树
【LeetCode 29】226.反转二叉树
20 2
|
2月前
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
22 0
|
2月前
【LeetCode 38】617.合并二叉树
【LeetCode 38】617.合并二叉树
20 0
|
2月前
【LeetCode 37】106.从中序与后序遍历构造二叉树
【LeetCode 37】106.从中序与后序遍历构造二叉树
25 0
|
2月前
【LeetCode 34】257.二叉树的所有路径
【LeetCode 34】257.二叉树的所有路径
23 0
|
2月前
【LeetCode 32】111.二叉树的最小深度
【LeetCode 32】111.二叉树的最小深度
19 0
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
63 6
|
4月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
128 2