代码随想录算法训练营第十四天|144.二叉树的前序遍历、145.二叉树的后序遍历、94.二叉树的中序遍历
144.二叉树的前序遍历
问题简述:对二叉树进行前序遍历。
思考:这个原函数要返回一个List,所以遍历的时候不用原函数,而是新创建一个返回void的preorder函数。
算法思路:不断先遍历跟节点,在分别递归遍历左右节点。
时间复杂度 :O(n)
空间复杂度 :O(n)
import java.util.ArrayList;
import java.util.List;
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
preorder(root, result);
return result;
}
//新创建一个返回void的preorder函数
public void preorder(TreeNode root, List<Integer> result) {
//判断当前节点是否为空
if (root == null) {
return;
}else {
result.add(root.val);
preorder(root.left, result);
preorder(root.right, result);
}
}
}
145.二叉树的后序遍历
问题简述:对二叉树进行后序遍历。
算法思路:不断先遍递归遍历左右节点,再遍历跟结点。
时间复杂度: O(n)
空间复杂度: O(n)
import java.util.ArrayList;
import java.util.List;
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
preorder(root, result);
return result;
}
public void preorder(TreeNode root, List<Integer> result) {
//判断当前节点是否为空
if (root == null) {
return;
}else {
preorder(root.left, result);
preorder(root.right, result);
result.add(root.val);
}
}
}
94.二叉树的中序遍历
问题简述:对二叉树进行中序遍历。
算法思路:不断先遍递归遍历左,再遍历当前跟结点,最后递归遍历右节点。
时间复杂度 O(n)
空间复杂度 O(n)
import java.util.*;
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
preorder(root, result);
return result;
}
public void preorder(TreeNode root, List<Integer> result) {
//判断当前节点是否为空
if (root == null) {
return;
}else {
preorder(root.left, result);
result.add(root.val);
preorder(root.right, result);
}
}
}
感想
还有迭代遍历和统一迭代法没有看,先跟上进度回来再看。