持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
今天,我们继续搞算法。
题目描述
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
题目分析
这个题目是让我们返回一个数的中序遍历,那怎么来想呢?首先我们要明白什么是二叉树的中序遍历,所谓二叉树的中序遍历就是先左子树,然后是根,然后是右子树,
如果我们不知道怎么编程,可以看示例,示例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 ;
}
总结
这是一道简单题目,我觉得题目本身不是很难,关键是一些概念,你得知道什么是树的中序遍历,我们先考虑最简单的一个示例,先放左子树,如果为空就返回,然后放值,再放右子树,等方法的递归调用之后,然后再回溯,从最底层依次放好我们需要的值即可。