代码随想录Day14|递归遍历二叉树
1.1题目链接:二叉树的前序遍历 - 力扣
题目描述:给你二叉树的根节点 root
,返回它节点值的 前序 遍历。
示例 1:
输入:root = [1,null,2,3]
输出:[1,2,3]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
示例 4:
输入:root = [1,2]
输出:[1,2]
示例 5:
输入:root = [1,null,2]
输出:[1,2]
1.2题目链接:二叉树的后序遍历 - 力扣
题目描述:给你一棵二叉树的根节点 root
,返回其节点值的 后序遍历 。
示例 1:
输入:root = [1,null,2,3]
输出:[3,2,1]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
1.3题目链接:二叉树的中序遍历 - 力扣
题目描述:给定一个二叉树的根节点 root
,返回 它的 中序 遍历 。
示例 1:
输入:root = [1,null,2,3]
输出:[1,3,2]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
二叉树的结构:
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;
}
}
解题思路
1.二叉树的前序遍历
二叉树的前序遍历,是从根节点开始,先遍历根节点,接着遍历左子树,最后再遍历右子树。如下图所示:
只需要使用递归的方法,首先从根节点开始,将根节点的数值放入集合中,然后开始往左子树遍历,左子树遍历完则往右子树遍历。注意递归结束的条件是遍历到的节点为空即可。
下面是代码示例:
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result=new ArrayList<>();
preorder(root,result);
return result;
}
public void preorder(TreeNode root,List<Integer> result){
if(root==null){
return;
}
result.add(root.val);
preorder(root.left,result);
preorder(root.right,result);
}
}
2.二叉树的中序遍历
二叉树的中序遍历是先遍历左子树,把左子树遍历完再遍历根节点最后遍历右子树。如下图所示:
和前序遍历一样,使用递归并注意递归的结束条件是遍历到的节点为空。与前序遍历不一样的地方在存放数的顺序。先遍历左子树,再把对应的值放到集合中,最后遍历右子树即可
下面是代码示例:
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res=new ArrayList<>();
inorder(root,res);
return res;
}
void inorder(TreeNode root,List<Integer> list){
if(root==null){
return;
}
inorder(root.left,list);
list.add(root.val);
inorder(root.right,list);
}
}
3.二叉树的后序遍历
二叉树的后序遍历是先遍历左子树,再遍历右子树,最后遍历根节点。如下图所示:
和前面两个遍历一样,都是使用递归的写法并且递归的结束条件也是遍历到的节点为空。只需要调整一下数值加入到集合里的顺序即可
下面是代码示例:
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res=new ArrayList<>();
postorder(root,res);
return res;
}
void postorder(TreeNode root ,List<Integer> res){
if(root==null){
return ;
}
postorder(root.left,res);
postorder(root.right,res);
res.add(root.val);
}
}
总结
这三道关于二叉树的遍历还是非常简单的,复习了一下之前学过的数据结构的内容。用的都是递归的方法进行求解,后续还需要学习如何使用迭代遍历与统一迭代进行求解