zoukankan      html  css  js  c++  java
  • leetcode1110

     1 class Solution:
     2     def __init__(self):
     3         self.res = []
     4         self.temp = []
     5     
     6     def preNode(self,node,to_delete):
     7         if node == None:
     8             return None
     9         val = node.val
    10         if val in to_delete:
    11             if node.left != None:
    12                 self.temp.append(node.left)
    13             if node.right != None:
    14                 self.temp.append(node.right)    
    15             to_delete.remove(val)
    16             return None
    17         else:
    18             if node.left != None:
    19                 leftval = node.left.val
    20                 if leftval in to_delete:
    21                     t = node.left
    22                     if t.left != None:
    23                         self.temp.append(t.left)
    24                     if t.right != None:
    25                         self.temp.append(t.right)
    26                     node.left = None
    27                     to_delete.remove(leftval)
    28                 else:
    29                     self.preNode(node.left,to_delete)
    30             if node.right != None:
    31                 rightval = node.right.val
    32                 if rightval in to_delete:
    33                     t = node.right
    34                     if t.left != None:
    35                         self.temp.append(t.left)
    36                     if t.right != None:
    37                         self.temp.append(t.right)
    38                     node.right = None
    39                     to_delete.remove(rightval)
    40                 else:
    41                     self.preNode(node.right,to_delete)
    42             return node
    43               
    44     def delNodes(self, root: TreeNode, to_delete: 'List[int]') -> 'List[TreeNode]':
    45         self.temp.append(root)
    46         while len(to_delete) > 0 and len(self.temp) > 0:
    47             t = self.temp.pop(0)
    48             node = self.preNode(t,to_delete)
    49             if node != None:
    50                 self.res.append(node)
    51         self.res += self.temp
    52         return self.res

    思路:遍历二叉树,如果当前节点为被删除节点,则将其左右子树拆开成两个独立的树,返回空值。

    如果左子树为被删除节点,则将左子树的左右子树拆开成两个独立的树,置当前节点的左子树为空,返回当前节点;否则,递归遍历左子树。

    如果右子树为被删除节点,则将右子树的左右子树拆开成两个独立的树,置当前节点的右子树为空,返回当前节点;否则,递归遍历右子树。

  • 相关阅读:
    8.5 day8
    8.1 day6
    课后作业 day29
    博客整理day29
    博客整理day28
    博客整理day27
    博客整理day26
    课后作业 day26
    Python 学习day22
    课后作业 day21
  • 原文地址:https://www.cnblogs.com/asenyang/p/11146041.html
Copyright © 2011-2022 走看看