import java.util.*; public class Solution { public TreeNode pruneLeaves (TreeNode root) { // 预处理 if (root == null || needPrune(root)) return null; // 修剪树 prune(root); // 返回修剪后的树 return root; } // 修剪传入的树 public static void prune(TreeNode root) { // 预处理 if (root == null) return; // 是否需要修剪左子树 if (root.left != null && needPrune(root.left)) { root.left = null; // 修剪左子树 } else { prune(root.left); // 递归修剪左子树 } // 是否需要修剪右子树 if (root.right != null && needPrune(root.right)) { root.right = null; // 修剪右子树 } else { prune(root.right); // 递归修剪右子树 } } // 判断当前结点是否需要修剪 public static boolean needPrune(TreeNode node) { // 预处理 if (node == null) return false; // 存在左叶子结点 if (node.left != null && isLeaf(node.left)) return true; // 存在右叶子结点 if (node.right != null && isLeaf(node.right)) return true; // 其子结点中不存在叶子结点 return false; } // 判断当前结点是否是叶子结点 public static boolean isLeaf(TreeNode node) { // 预处理 if (node == null) return false; // 当前结点没有子结点,则其为叶子结点 return node.left == null && node.right == null; } }