0%

leetcode8-1325. Delete Leaves With a Given Value

1. problem

給定一個二元樹根和一個整數目標,刪除所有值為目標的葉節點。
注意,一旦你刪除了一個值為target的葉子節點,如果它的父節點變成了葉子節點並且值為target,那麼它也應該被刪除(你需要繼續這樣做直到你不能)。

2. thought

利用postorder遞迴特性,

  1. 確認左節點存在, 若有遞迴左節點
  2. 確認右節點存在, 若有遞迴右節點
  3. 確認左右節點為相同(None==None) 且 等於target值, 則回傳None, 否則維持原root

3. solution

class Solution:
_list = []
def removeLeafNodes(self, root: Optional[TreeNode], target: int) -> Optional[TreeNode]:
if root.left: root.left = self.removeLeafNodes(root.left, target)
if root.right: root.right = self.removeLeafNodes(root.right, target)
return None if root.left == root.right and root.val==target else root