前言
本题主要考查树的中序遍历。
提示:以下是本篇文章正文内容,编程语言为Java
一、题目描述
给定一个二叉树的根节点 root ,返回它的 中序 遍历。
示例 1:
输入:root = [1,null,2,3]
输出:[1,3,2]
链接:二叉树的中序遍历
二、解题思路
二叉树的中序遍历:访问左子树——打印根节点——访问右子树,可以通过递归和迭代来实现。
其中递归方式比较简单,我们只要确定递归出口和访问相邻节点的顺序两个要素即可。递归的时候隐式地维护了一个栈,因此我们在迭代的时候需要显式地将这个栈模拟出来。
三、示例代码
1)递归方式:
class Solution {
List<Integer> ans=new ArrayList<>();
public List<Integer> inorderTraversal(TreeNode root) {
inorder(root);
return ans;
}
public void inorder(TreeNode root) {
if(root==null){
return;
}
inorderTraversal(root.left);
ans.add(root.val);
inorderTraversal(root.right);
}
}
2)迭代方式:
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> ans=new ArrayList<>();
Deque<TreeNode> st=new LinkedList<>();
while(root!=null || !st.isEmpty()){
while(root!=null){
st.push(root);
root=root.left;
}
root=st.pop();
ans.add(root.val);
root=root.right;
}
return ans;
}
}
总结
二叉树的DFS,通常有三种常见的遍历方式:
1)前序遍历: 处理根节点——访问左子树——访问右子树
2)中序遍历: 访问左子树——处理根节点——访问右子树
3)后序遍历: 访问左子树——访问右子树——处理根节点
利用递归实现非常相似,框架如下所示:
1)前序遍历:
if(root==null){
return;
}
System.out.println(root.val);
dfs(root.left);
dfs(root.right);
2)中序遍历:
if(root==null){
return;
}
dfs(root.left);
System.out.println(root.val);
dfs(root.right);
3)后序遍历:
if(root==null){
return;
}
dfs(root.left);
dfs(root.right);
System.out.println(root.val);