1、给定一个二叉树,返回它的 前序 遍历。
解题思路:因为题目要求最终返回二叉树的前序遍历结果,因此我们要使用List将遍历结果保存下来,前序遍历遵循先访问根节点,再递归遍历左子树,最终递归遍历右子树。
具体代码:
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
if(root == null) {
return result;
}
//访问根节点,把当前值插入到result中
result.add(root.val);
//递归遍历左子树
result.addAll(preorderTraversal(root.left));
//递归遍历访问右子树
result.addAll(preorderTraversal(root.right));
}
}
运行结果:
2、给定一个二叉树,返回它的中序 遍历。
解题思路:使用List存储遍历结果,中序遍历遵循先遍历左子树,再遍历根节点,最终遍历右子树。
具体代码:
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
if(root == null){
return result;
}
result.addAll(inorderTraversal(root.left));
result.add(root.val);
result.addAll(inorderTraversal(root.right));
return result;
}
}
运行结果:
3、给定一个二叉树,返回它的 后序 遍历。
解题思路:创建一个新的List存储遍历结果,遵循先遍历左子树、遍历右子树、最后遍历根节点的顺序。
具体代码:
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
if(root == null){
return result;
}
result.addAll(postorderTraversal(root.left));
result.addAll(postorderTraversal(root.right));
result.add(root.val);
return result;
}
}
运行结果: