Leetcode-1110. Delete Nodes and Return Forest

Original Link: https://leetcode.com/problems/delete-nodes-and-return-forest/

First, consider a similar but replacing trees to linked node question,

There are two kinds of nodes:
To be deleted (D)
and normal (N)

There are 4 relations between node and node.next (left/right):
D -> D
D -> N
N -> D
N -> N

For DtoD and NtoN, we don’t need to be worried. We can simply move the pointer to the next.

For DtoN, we need to do

  1. delete D.next
  2. append N to the list

For NtoD, we need to do

  1. delete N.next

Replacing all above “next” to left and right, we already have a solution.

What’s more, for finding convinence, I cast to_delete into a set.

Code:

class Solution(object):
    def delNodes(self, root, to_delete):
        """
        :type root: TreeNode
        :type to_delete: List[int]
        :rtype: List[TreeNode]
        """
        
        global s 
        s = set(to_delete)
        
        padNode = TreeNode(float("Inf"))
        padNode.left = root
        s.add(float("Inf"))
        
        root = padNode
 
        op = []
        
        op.extend(self.helper(root))
        
        return op
    
    def helper(self, root):

        op = []
        
        if root.val in s:
            
            if root.left:
                if root.left.val in s:
                    op.extend(self.helper(root.left))
                else:
                    op.append(root.left)
                    op.extend(self.helper(root.left))
                    root.left = None
            if root.right:
                if root.right.val in s:
                    op.extend(self.helper(root.right))
                else:
                    op.append(root.right)
                    op.extend(self.helper(root.right))
                    root.right = None
        else:
            
            if root.left:
            
                op.extend(self.helper(root.left))
                if root.left.val in s:
                    root.left = None
            if root.right:
                op.extend(self.helper(root.right))
                if root.right.val in s:
                    root.right = None
                    
        return op
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值