Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[LeetCode] 1325. Delete Leaves With a Given Value #1325

Open
grandyang opened this issue May 30, 2019 · 0 comments
Open

[LeetCode] 1325. Delete Leaves With a Given Value #1325

grandyang opened this issue May 30, 2019 · 0 comments

Comments

@grandyang
Copy link
Owner

grandyang commented May 30, 2019

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

这道题给了一个二叉树和一个目标值 target,说是让删除所有结点值为 target 的叶结点,且题目中说了新生成的叶结点若值为 target 也要删除。这很明显是一个从下到上的处理过程,也就是后序遍历,因为只有删除了掉了当前的叶结点,才有可能形成新的叶结点。后序遍历用递归的方式写比较简单,首先判空,然后对左子结点调用递归函数,并将返回值更新左子结点,然后再对右子结点调用递归函数,并将返回值更新右子结点。此时若左右子结点是满足要求的叶结点的话就已经被删除了,此时判断若左右子结点为空,则当前结点也是一个叶结点,若其结点值为 target,则返回空,否则返回 root 即可,参见代码如下:

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

Github 同步地址:

#1325

参考资料:

https://leetcode.com/problems/delete-leaves-with-a-given-value/

https://leetcode.com/problems/delete-leaves-with-a-given-value/solutions/484264/java-c-python-recursion-solution/

LeetCode All in One 题目讲解汇总(持续更新中...)

(欢迎加入博主的知识星球,博主将及时答疑解惑,并分享刷题经验与总结,快快加入吧~)

知识星球 喜欢请点赞,疼爱请打赏❤️~.~

微信打赏

|

Venmo 打赏


---|---

@grandyang grandyang changed the title [LeetCode] 1325. Missing Problem [LeetCode] 1325. Delete Leaves With a Given Value Sep 14, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant