面向小白的力扣94. 二叉树的中序遍历

139 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

今天,我们继续搞算法。

题目描述

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

image.png

题目分析

这个题目是让我们返回一个数的中序遍历,那怎么来想呢?首先我们要明白什么是二叉树的中序遍历,所谓二叉树的中序遍历就是先左子树,然后是根,然后是右子树,

如果我们不知道怎么编程,可以看示例,示例1是1,null,3,2,这个树是1的左边是空,右边是3,3的左边是2,所以这个左子树是空,我们直接返回,然后放根,根是1,然后放右子树,3和2,然后把数组返回,所以答案是1,3,2.那莪们从根出发,先找左子树,然后放入他的值,然后再放根的值,再右子树,然后如果为空就返回。

解题思路

  • 确定操作对象:本题中,操作对象1个root
  • 确定操作条件:节点为空,则返回结果。
  • 确定操作过程:操作过程为,按照中序遍历规则放数。
  • 确定结果返回:返回最终结果。

代码

/**
 * 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) {
       seq = new ArrayList<Integer>();
       return dfs(root) ;   
    }

     public List<Integer> dfs(TreeNode root){
       if(root == null) return seq;
        dfs(root.left);
        seq.add(root.val);
         dfs(root.right);
         return seq ;
     }
    List<Integer> seq ;
}

总结

这是一道简单题目,我觉得题目本身不是很难,关键是一些概念,你得知道什么是树的中序遍历,我们先考虑最简单的一个示例,先放左子树,如果为空就返回,然后放值,再放右子树,等方法的递归调用之后,然后再回溯,从最底层依次放好我们需要的值即可。