LeetCode-94. 二叉树的中序遍历

130 阅读1分钟

1.题目描述

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 树中节点数目在范围 [0, 100]
  • -100 <= Node.val <= 100

Tips: 力扣地址:leetcode-cn.com/problems/bi…

2. 思路分析

首先我们需要了解什么是中序遍历,所谓的中序遍历:遍历左子树,然后访问根结点,最后遍历右子树。就是根节点在中间访问(左子树、根节点、右子树)。而遍历的过程符合递归的性质。第一种方式就是使用递归来遍历,这个也是简单的方式。但是仔细看会发现还符合栈的特点,所以还能使用栈来的进出来进行操作下面用栈的操作来实现中序遍历。

3. AC代码

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
  List<Integer> result = new ArrayList<>();
        if(null == root){
            return result;
        }
        Stack<TreeNode> stack = new Stack<>();
        while(root != null || !stack.isEmpty()){
            while(root != null){
                stack.push(root);
                root = root.left;
            }
            TreeNode pop = stack.pop();
            result.add(pop.val);
            root = pop.right;
        }
        return result;
    }
}

提交代码检验正确性:

image.png

完全正确,速度很快。只需要进行出栈入栈操作。

4. 总结

二叉树的遍历大多数情况下都可以用递归来实现,在不考虑效率的情况下,如果需要考虑其他的就需要使用其他的方式。

我是蚂蚁背大象,文章对你有帮助点赞关注我,文章有不正确的地方请您斧正留言评论~谢谢