Bootstrap

java练习(40)

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);
    }
}

代码解释

本题要求实现二叉树的后序遍历,后序遍历的顺序是先遍历左子树,再遍历右子树,最后访问根节点。我们可以使用递归的方法来实现。

具体步骤

  1. 定义结果列表
    • 创建一个 ArrayList 类型的 result 列表,用于存储后序遍历的结果。
  2. 调用递归方法
    • 调用 postorder 方法进行递归遍历,传入根节点 root 和结果列表 result
  3. 递归方法 postorder
    • 递归终止条件:如果当前节点 node 为空,直接返回。
    • 递归遍历左子树:调用 postorder(node.left, result) 递归遍历左子树。
    • 递归遍历右子树:调用 postorder(node.right, result) 递归遍历右子树。
    • 访问根节点:将当前节点的值 node.val 添加到结果列表 result 中。
  4. 返回结果
    • 递归遍历结束后,返回存储后序遍历结果的 result 列表。
;