题目地址:
https://leetcode.com/problems/delete-leaves-with-a-given-value/
删除二叉树中值为target的叶子节点。如果删除叶子后,新的叶子节点值也为target,则也要删除。返回删除后的树根。
思路是二叉树的后序遍历。先删除左子树中值为target的叶子节点,再删除右子树中值为target的叶子节点,最后如果根节点值为target并且左右子树都为空,那么就把根也删掉。代码如下:
class Solution {
public:
TreeNode* removeLeafNodes(TreeNode* root, int x) {
if (!root) return nullptr;
root->left = removeLeafNodes(root->left, x);
root->right = removeLeafNodes(root->right, x);
if (!root->left && !root->right && root->val == x) return nullptr;
return root;
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( h ) O(h) O(h)。