ps:题目来自力扣
二叉树的后序遍历
给你一棵二叉树的根节点 root
,返回其节点值的 后序遍历
import java.util.ArrayList;
import java.util.List;
// 定义二叉树节点类
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;
}
}
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
postorder(root, result);
return result;
}
private void postorder(TreeNode node, List<Integer> result) {
if (node == null) {
return;
}
// 递归遍历左子树
postorder(node.left, result);
// 递归遍历右子树
postorder(node.right, result);
// 将当前节点的值添加到结果列表中
result.add(node.val);
}
}
代码解释
本题要求实现二叉树的后序遍历,后序遍历的顺序是先遍历左子树,再遍历右子树,最后访问根节点。我们可以使用递归的方法来实现。
具体步骤
- 定义结果列表:
- 创建一个
ArrayList
类型的result
列表,用于存储后序遍历的结果。
- 创建一个
- 调用递归方法:
- 调用
postorder
方法进行递归遍历,传入根节点root
和结果列表result
。
- 调用
- 递归方法
postorder
:- 递归终止条件:如果当前节点
node
为空,直接返回。 - 递归遍历左子树:调用
postorder(node.left, result)
递归遍历左子树。 - 递归遍历右子树:调用
postorder(node.right, result)
递归遍历右子树。 - 访问根节点:将当前节点的值
node.val
添加到结果列表result
中。
- 递归终止条件:如果当前节点
- 返回结果:
- 递归遍历结束后,返回存储后序遍历结果的
result
列表。
- 递归遍历结束后,返回存储后序遍历结果的