1. 程式人生 > >Leetcode 965:單值二叉樹(最詳細的解法!!!)

Leetcode 965:單值二叉樹(最詳細的解法!!!)

如果二叉樹每個節點都具有相同的值,那麼該二叉樹就是單值二叉樹。

只有給定的樹是單值二叉樹時,才返回 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)

更簡潔的寫法。

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

如有問題,希望大家指出!!!