LeetCode热题100——二叉树的中序遍历

LeetCode热题100—学习心得012

二叉树——二叉树的中序遍历

题目如下:

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

请添加图片描述
示例 1:

输入:root = [1,null,2,3]
输出:[1,3,2]

示例 2:

输入:root = []
输出:[]

示例 3:

输入:root = [1]
输出:[1]

提示:

树中节点数目在范围 [ 0 , 100 ] [0, 100] [0,100]
− 100 < = N o d e . v a l < = 100 -100 <= Node.val <= 100 100<=Node.val<=100


思路分析

完成这道题前我带大家先简单了解一下二叉树的结构和遍历方法。

从物理结构的角度来看,树是一种基于链表的数据结构,因此其遍历方式是通过指针逐个访问节点。然而,树是一种非线性数据结构,这使得遍历树比遍历链表更加复杂,需要借助搜索算法来实现。

二叉树常见的遍历方式包括层序遍历、前序遍历、中序遍历和后序遍历等。

层序遍历(level-order traversal)从顶部到底部逐层遍历二叉树,并在每一层按照从左到右的顺序访问节点,它体现了一种“一圈一圈向外扩展”的逐层遍历方式。层序遍历本质上属于广度优先遍历(breadth-first traversal),也称广度优先搜索(breadth-first search, BFS)。

前序、中序和后序遍历都属于深度优先遍历(depth-first traversal),也称深度优先搜索(depth-first search, DFS),它体现了一种“先走到尽头,再回溯继续”的遍历方式。

本题要求返回二叉树的中序遍历节点序列,直接使用中序遍历的方法即可。

代码解析

由于题目提示树中节点可能为0,所以需要对二叉树的节点进行合法性判断。中序遍历节点的顺序为左–根–右,即左子节点在前,根节点在中,右子节点在后。定义一个list列表用于存放节点的值,调用中序遍历方法,当传入节点不为空时,方法内需要使用传入节点的左子节点和右子节点递归调用自身,并将当前节点的值加入到list列表中。

三行代码在前序、中序和后序遍历中都是固定的,区别在于顺序不同。

若为前序,则先将根节点的值存入列表;

若为中序,则先调用函数并传入其左子节点作为参数,再将节点的值存入列表;

若为后序,则先调用函数并传入其左子节点作为参数,再调用函数并传入其右子节点作为参数,最后将节点的值存入列表;


代码解答

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        inorder(root, list);
        return list;
    }

    public void inorder(TreeNode root, List<Integer> list) {
        if(root != null) {
            inorder(root.left, list);
            list.add(root.val);
            inorder(root.right, list);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Large-Swan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值