- Delete Leaves With a Given Value
Solved
Medium
Topics
Companies
Hint
Given a binary tree root and an integer target, delete all the leaf nodes with value target.
Note that once you delete a leaf node with value target, if its parent node becomes a leaf node and has the value target, it should also be deleted (you need to continue doing that until you cannot).
Example 1:
Input: root = [1,2,3,2,null,2,4], target = 2
Output: [1,null,3,null,4]
Explanation: Leaf nodes in green with value (target = 2) are removed (Picture in left).
After removing, new nodes become leaf nodes with value (target = 2) (Picture in center).
Example 2:
Input: root = [1,3,3,3,2], target = 3
Output: [1,3,null,null,2]
Example 3:
Input: root = [1,2,null,2,null,2], target = 2
Output: [1]
Explanation: Leaf nodes in green with value (target = 2) are removed at each step.
Constraints:
The number of nodes in the tree is in the range [1, 3000].
1 <= Node.val, target <= 1000
解法1:后序遍历!
注意:root = helper(root, target); 不能直接写成helper(root, target); 因为有可能root也被改成NULL。
参考case [1, 1, 1],这里的root也被清掉了。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* removeLeafNodes(TreeNode* root, int target) {
root = helper(root, target); //注意不能直接写成helper(root, target); 因为有可能root也被改成NULL。参考case [1, 1, 1]
return root;
}
private:
TreeNode *helper(TreeNode *root, int target) {
if (!root) return NULL;
TreeNode *left = helper(root->left, target);
TreeNode *right = helper(root->right, target);
if (!left && !right && root->val == target) return NULL;
root->left = left;
root->right = right;
return root;
}
};
也可以直接写成:
class Solution {
public:
TreeNode* removeLeafNodes(TreeNode* root, int target) {
if (!root) return NULL;
TreeNode *left = removeLeafNodes(root->left, target);
TreeNode *right = removeLeafNodes(root->right, target);
if (!left && !right && root->val == target) return NULL;
root->left = left;
root->right = right;
return root;
}
};