本文共 2025 字,大约阅读时间需要 6 分钟。
给定一个二叉树,要求逐步删除叶子节点并返回每次删除后的叶子节点列表。以下是逐步解决方案:
问题分析:我们需要对二叉树进行逐层删除叶子节点的操作,每次删除后返回当前的叶子节点列表。直到树为空为止。
方法选择:使用深度优先搜索(DFS)遍历树,并在遍历过程中删除叶子节点。递归的方式可以帮助逐层处理每个节点,并在处理叶子节点时记录结果。
算法设计:
复杂度分析:
代码实现:
import java.util.ArrayList;import java.util.List;public class Solution { public List findLeaves(TreeNode root) { List res = new ArrayList<>(); // 递归处理每一层叶子节点 while (root != null) { List cur = new ArrayList<>(); root = dfs(root, cur); res.add(cur); } return res; } private TreeNode dfs(TreeNode root, List cur) { if (root == null) { return null; } // 检查是否为叶子节点 if (root.left == null && root.right == null) { cur.add(root.val); // 返回null表示删除该节点 return null; } else { // 递归处理子树,并返回处理后的根节点 root.left = dfs(root.left, cur); root.right = dfs(root.right, cur); return root; } } public static void main(String[] args) { // 初始化测试树 TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); root.left.left = new TreeNode(4); root.left.right = new TreeNode(5); root.right.left = new TreeNode(6); root.right.right = new TreeNode(7); // 执行算法 List result = new Solution().findLeaves(root); // 输出结果 System.out.println("第一次删除叶子:" + result); }}class TreeNode { int val; TreeNode left, right; TreeNode(int x) { val = x; }} 测试与验证:
通过以上方法,可以有效地逐步删除二叉树的叶子节点,并记录每次删除后的结果,满足题目的要求。
转载地址:http://idds.baihongyu.com/