“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;
}
}
四、总结:
- 好了,代码撸完,我们
总结一下:-
理解前中后遍历的概念,以及迭代的思想
-
判断存取节点所需要用的数据结构
-
边界条件,什么情况遍历右子树
-