zoukankan      html  css  js  c++  java
  • 【leetcode】1325. Delete Leaves With a Given Value

    题目如下:

    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 it's parent node becomes a leaf node and has the value target, it should also be deleted (you need to continue doing that until you can't).

    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.
    

    Example 4:

    Input: root = [1,1,1], target = 1
    Output: []
    

    Example 5:

    Input: root = [1,2,3], target = 1
    Output: [1,2,3]

    Constraints:

    • 1 <= target <= 1000
    • Each tree has at most 3000 nodes.
    • Each node's value is between [1, 1000].

    解题思路:最直接的方法就是循环做删除特定值的叶子节点的操作,只能没有符合条件的叶子节点为止。

    代码如下:

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution(object):
        def recursive(self,node,parent,target,direction):
            if node.left is None and node.right is None and node.val == target:
                self.flag = True
                if direction == 'L':
                    parent.left = None
                else:
                    parent.right = None
            if node.left != None:
                self.recursive(node.left,node,target,'L')
    
            if node.right != None:
                self.recursive(node.right,node,target,'R')
    
    
    
        def removeLeafNodes(self, root, target):
            """
            :type root: TreeNode
            :type target: int
            :rtype: TreeNode
            """
            while True:
                self.flag = False
                if root.left == None and root.right == None and root.val == target:
                    return None
                node = root
                self.recursive(node,None,target,'')
                if self.flag == False:
                    break
            return root
            
  • 相关阅读:
    apue学习笔记(第十五章 进程间通信)
    apue学习笔记(第十四章 高级I/O)
    apue学习笔记(第十三章 守护进程)
    各种仪器销售说明网站
    专业英语分类和查询
    c#网格控件,Excel控件
    sqlite支持linq
    使WebDev.WebServer.exe 当web服务器
    zip压缩文件测试
    c++爬虫子
  • 原文地址:https://www.cnblogs.com/seyjs/p/12217994.html
Copyright © 2011-2022 走看看