Leetcode 965:单值二叉树(最详细的解法!!!)

版权声明:本文为博主原创文章,未经博主允许不得转载。有事联系:[email protected] https://blog.csdn.net/qq_17550379/article/details/85539683

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

只有给定的树是单值二叉树时,才返回 true;否则返回 false

示例 1:

输入:[1,1,1,1,1,null,1]
输出:true

示例 2:

输入:[2,2,2,5,2]
输出:false

提示:

  1. 给定树的节点数范围是 [1, 100]
  2. 每个节点的值都是整数,范围为 [0, 99]

解题思路

这个问题非常简单,首先想到的解法就是遍历二分搜索树的结果,将结果存放到list中,然后遍历list查看是够有重复元素即可。

Leetcode 144:二叉树的前序遍历(最优雅的解法!!!)

Leetcode 94:二叉树的中序遍历(最优雅的解法!!!)

Leetcode 145:二叉树的后序遍历(最详细的解法!!!)

class Solution:
    def isUnivalTree(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        if not root:
            return True
        
        tree = list()
        self.inOrder(root, tree)
        pre = root.val
        for i in tree:
            if i != None and i != pre:
                return False
            
        return True
            
    def inOrder(self, root, tree):
        if root:
            self.inOrder(root.left, tree)
            tree.append(root.val)
            self.inOrder(root.right, tree)

更简洁的写法。

扫描二维码关注公众号,回复: 4738299 查看本文章
class Solution:    
    def isUnivalTree(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        if not root:
            return True
        
        if (root.left and root.val != root.left.val) or (root.right and root.val != root.right.val):
            return False
        
        return self.isUnivalTree(root.left) and self.isUnivalTree(root.right)

最简洁的写法。

class Solution:
    def isUnivalTree(self, root, val=-1):
        """
        :type root: TreeNode
        :rtype: bool
        """      
        return root == None or ((val == -1 or root.val == val) and \
        self.isUnivalTree(root.left, root.val) and self.isUnivalTree(root.right, root.val))

我将该问题的其他语言版本添加到了我的GitHub Leetcode

如有问题,希望大家指出!!!

猜你喜欢

转载自blog.csdn.net/qq_17550379/article/details/85539683