Leetcode 1325.删除给定值的叶子节点(Delete Leaves With a Given Value)

Leetcode 1325.删除给定值的叶子节点

1 题目描述(Leetcode题目链接

  给你一棵以 root 为根的二叉树和一个整数 target ,请你删除所有值为target 的 叶子节点 。注意,一旦删除值为 target 的叶子节点,它的父节点就可能变成叶子节点;如果新叶子节点的值恰好也是 target ,那么这个节点也应该被删除。也就是说,你需要重复此过程直到不能继续删除。
示例1:
在这里插入图片描述

输入:root = [1,2,3,2,null,2,4], target = 2
输出:[1,null,3,null,4]
解释:
上面左边的图中,绿色节点为叶子节点,且它们的值与 target 相同(同为 2 ),它们会被删除,得到中间的图。
有一个新的节点变成了叶子节点且它的值与 target 相同,所以将再次进行删除,从而得到最右边的图。

示例2:
在这里插入图片描述

输入:root = [1,2,null,2,null,2], target = 2
输出:[1]
解释:每一步都删除一个绿色的叶子节点(值为 2)。

2 题解

  根据题意,可以使用深度优先搜索遍历二叉树,找到符合条件的叶子节点删除即可。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def removeLeafNodes(self, root: TreeNode, target: int) -> TreeNode:
        if not root:
            return []
        def DFS(Node):
            if Node.left:
                DFS(Node.left)
                if Node.left.val == 'Del':
                    Node.left = None
            if Node.right:
                DFS(Node.right)
                if Node.right.val == 'Del':
                    Node.right = None
            if not Node.left and not Node.right and Node.val == target:
                Node.val = 'Del'
        DFS(root)
        if root.val == 'Del':
            return None
        return root
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值