【力扣】814:二叉樹剪枝 | 遞歸

題目描述

給定二叉樹根結點 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章