Leetcode 94. 二叉树的中序遍历

103 阅读1分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

一、题目描述

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

二、思路分析

  • 关于二叉树的概念,应该大家都知道吧,这里就不多说了
    • 二叉树的遍历是非常基础的算法题,觉得有必要写一下
    • 可以有前序遍历中序遍历和后序遍历,所谓前中后是指根节点的位置在哪
    • 这道题可以用递归法去解,也可以用迭代法
    • 如果面试考这道题,两种解法都要会哦!(这里我用迭代法解题,递归的话比较简单,朋友们自行查找吧)

三、AC 代码:

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
      //用来返回的集合
      List<Integer>res = new ArrayList<>();
      //边界条件为空直接返回
      if(root == null)return res;
      //建立遍历的节点
      TreeNode curr = root;
      //创建栈用于存取节点
      Stack<TreeNode>stack = new Stack<>();
      //循环条件,栈不为空或者节点不为空
      while(curr!=null||!stack.isEmpty()){
          //不为空压入栈,并更新节点为左子树,直到最左的孩子
          while(curr!=null){
              stack.push(curr);
              curr = curr.left;
          }
          //为空则取弹出栈中节点
          TreeNode node = stack.pop();
          //加入集合
          res.add(node.val);
          //去除右子树
          curr = node.right;
      }
      //返回结果
      return res;
    }
   
}

四、总结:

  • 好了,代码撸完,我们总结一下
    • 理解前中后遍历的概念,以及迭代的思想

    • 判断存取节点所需要用的数据结构

    • 边界条件,什么情况遍历右子树

最后这个算法是Leetcode的第94题,是热题100的第37题,去年我刷了热题100用时一个月左右,接下来我会继续更新,小伙伴可以点赞关注,如果你也在刷热题100的话,希望可以对你有一些启发!