---
# System prepended metadata

title: 'LeetCode #1325 [Delete Leaves With a Given Value](https://leetcode.com/problems/delete-leaves-with-a-given-value/)'
tags: [Recursion, LeetCode, Medium, Tree]

---

###### tags: `LeetCode` `Tree` `Recursion` `Medium`
# LeetCode #1325 [Delete Leaves With a Given Value](https://leetcode.com/problems/delete-leaves-with-a-given-value/)
### (Medium) (第一次沒做出來)
給你一棵以 root 為根的二元樹和一個整數 target ，請你刪除所有值為 target 的 葉子節點 。

注意，一旦刪除值為 target 的葉子節點，它的父節點就可能變成葉子節點；如果新葉子節點的值恰好也是 target ，那麼這個節點也應該被刪除。

也就是說，你需要重複此過程直到不能繼續刪除。


---
雖然題目說是刪除葉節點後, 它的父節點可能因此變成葉節點, 故需要重複檢查, 但其實遞迴的特性本來就是先做完最底層的, 再將結果回傳到上一層...如此重複, 因此單純的處理完左右子節點最後再檢查root是否為葉節點並且root的值剛好等於target即可。

(別被題目的敘述給迷惑了)

---
```
class Solution {
public:
    TreeNode* removeLeafNodes(TreeNode* root, int target) {
        if(root->left)root->left=removeLeafNodes(root->left, target);
        if(root->right)root->right=removeLeafNodes(root->right, target);
        return root->left==root->right&&root->val==target?nullptr:root;
    }
};
```