題目描述
給定二叉樹根結點 root ,此外樹的每個結點的值要麼是 0,要麼是 1。
返回移除了所有不包含 1 的子樹的原二叉樹。
( 節點 X 的子樹爲 X 本身,以及所有 X 的後代。)
算法思路
我可太蠢了,這道題居然做了好久……磨磨唧唧半天,結果……
class Solution:
def pruneTree(self, root: TreeNode) -> TreeNode:
if not root:return None
root.left=self.pruneTree(root.left)
root.right=self.pruneTree(root.right)
if not root.left and not root.right:
if root.val:
return root
else:return None
else:
return root
執行用時 :32 ms, 在所有 Python3 提交中擊敗了91.52%的用戶
內存消耗 :13.7 MB, 在所有 Python3 提交中擊敗了12.50%的用戶
原版得貼出來,這是恥辱。
class Solution:
def pruneTree(self, root: TreeNode) -> TreeNode:
return self.prune(root)[0]
def prune(self, root: TreeNode) -> TreeNode:
if not root:return root,True
if not (root.left or root.right):
if root.val:return root,True
else:
root=None
return root,False
root.left,l=self.prune(root.left)
root.right,r=self.prune(root.right)
if not (l or r):
root=None
return root,False
else:
return root,True
噢,可以簡化一下
class Solution:
def pruneTree(self, root: TreeNode) -> TreeNode:
if not root:return None
root.left=self.pruneTree(root.left)
root.right=self.pruneTree(root.right)
if not (root.left or root.right or root.val):return None
else:return root