【问题标题】:Univalued Binary Tree - recursive approach error单值二叉树 - 递归方法错误
【发布时间】:2021-02-26 01:59:08
【问题描述】:

如果树中的每个节点都具有相同的值,则二叉树是单值的。 当且仅当给定的树是单值时才返回 true。

我使用递归方法检查根的左右节点并将其附加到 arr。最后,我正在检查数组的唯一值。但是我没有得到 [2,2,2,5,2] 作为二叉树节点的正确答案。我知道有一种更简单的 dfs 方法,但我想知道我的代码有什么问题。请帮忙。

class Solution:
    def isUnivalTree(self, root: TreeNode) -> bool:
        if root == None:
            return False
        arr = []
        arr.append(root.val)
        self.isUnivalTree(root.left)
        self.isUnivalTree(root.right)
        return len(set(arr)) == 1

【问题讨论】:

    标签: python tree


    【解决方案1】:

    你的代码总是会返回 True(除了一棵空树),因为 len(arr) 总是 1 - 你只有 append 一个值给它。意识到arr 是函数的一个本地 变量,所以任何递归调用都会有自己的arr 版本。

    最好使用递归调用的 return 值来获得最终结果:

    class Solution:
        def isUnivalTree(self, root: TreeNode) -> bool:
            return ((not root.left or root.val == root.left.val and self.isUnivalTree(root.left))
                and (not root.right or root.val == root.right.val and self.isUnivalTree(root.right)))
    

    当且仅当树中有两个不同的值时,必须有一个节点与其其中一个子节点的值不同。

    【讨论】:

      【解决方案2】:

      您在 每个 调用中创建一个列表,即每次调用 isUnivalTree 时,您都会初始化一个新列表。您应该为类的实例设置一个列表,将列表传递给方法或更改方法:

      class Solution:
          def isUnivalTree(self, root: TreeNode, arr=None) -> bool:
              if root == None:
                  return False
              if arr is None:
                  arr = []
              arr.append(root.val)
              self.isUnivalTree(root.left, arr=arr)
              self.isUnivalTree(root.right, arr=arr)
              return len(set(arr)) == 1
      

      【讨论】:

        猜你喜欢
        • 2013-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-19
        • 2014-03-29
        • 2021-07-26
        • 1970-01-01
        • 2023-03-05
        相关资源
        最近更新 更多