1. 前序遍历
描述:
打印顺序为: 根左右
思路:
考虑使用递归的方法
(1)先定义一个List类型的变量ret来保存返回值
(2)定义一个方法来进行递归操作(传入当前的根节点和res),若根为空return。
因为是根左右的方式,所以先把root的值存到res.add里,然后再递归左孩子和右孩子
(3)递归完成后返回res即可
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
preorder(root, res);
return res;
}
public void preorder(TreeNode root, List<Integer> res){
if(root == null) return;
res.add(root.val);
preorder(root.left, res);
preorder(root.right, res);
}
}
2. 中序遍历
描述:
打印顺序为:左根右
思路:
考虑使用递归的方法
(1)先定义一个List类型的变量ret来保存返回值
(2)定义一个方法来进行递归操作(传入当前的根节点和res),若根为空return。
因为是 左根右 的方式,所以先递归左孩子,再把root的值存到res.add里,最后再递归右孩子
(3)递归完成后返回res即可
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
preorder(root, res);
return res;
}
public void preorder(TreeNode root, List<Integer> res){
if(root == null) return;
preorder(root.left, res);
res.add(root.val);
preorder(root.right, res);
}
}
3. 后序遍历
描述:
打印顺序为:左右根
思路:
考虑使用递归的方法
(1)先定义一个List类型的变量ret来保存返回值
(2)定义一个方法来进行递归操作(传入当前的根节点和res),若根为空return。
因为是 左右根 的方式,所以先递归左孩子和右孩子,再把root的值存到res.add里
(3)递归完成后返回res即可
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
postorder(root, res);
return res;
}
public void postorder(TreeNode root, List<Integer> res){
if(root == null) return;
postorder(root.left, res);
postorder(root.right, res);
res.add(root.val);
}
}