题意:
方法一:
递归
思路:如果当前节点的左儿子或右儿子是叶子节点,则返回 null 。
否则,分别递归左儿子和右儿子。
最后返回 root 。
class Solution { public: TreeNode* pruneLeaves(TreeNode* root) { if(root==nullptr) return nullptr; //左儿子节点是叶子节点 if(root->left&&root->left->left==nullptr&&root->left->right==nullptr){ return nullptr; } //右儿子节点是叶子节点 if(root->right&&root->right->left==nullptr&&root->right->right==nullptr){ return nullptr; } root->left=pruneLeaves(root->left);//递归左儿子节点 root->right=pruneLeaves(root->right);//递归右儿子节点 return root; } };
时间复杂度:空间复杂度:
方法二:
java实现
思路:思路同方法一相同。
import java.util.*; public class Solution { public TreeNode pruneLeaves (TreeNode root) { if(root==null){ return null; } //左儿子是叶子节点 if(root.left!=null&&root.left.left==null&&root.left.right==null){ return null; } //右儿子是叶子节点 if(root.right!=null&&root.right.left==null&&root.right.right==null){ return null; } root.left=pruneLeaves(root.left);//递归左儿子 root.right=pruneLeaves(root.right);//递归右儿子 return root; } }
时间复杂度:空间复杂度: