如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回 true
;否则返回 false
。
示例 1:
输入:[1,1,1,1,1,null,1] 输出:true
示例 2:
输入:[2,2,2,5,2] 输出:false
解法一:递归
一颗树是单值的,当且仅当根节点的子节点所在的子树也是单值的,同时根节点的值与子节点的值相同。
我们可以使用递归实现这个判断的过程。left_correct
表示当前节点的左孩子是正确的,也就是说:左孩子所在的子树是单值的,并且当前节点的值等于左孩子的值。right_correct
对当前节点的右孩子表示同样的事情。递归处理之后,当根节点的这两种属性都为真的时候,我们就可以判定这颗二叉树是单值的。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isUnivalTree(self, root: TreeNode) -> bool:
left_correct=(not root.left or root.left.val==root.val
and self.isUnivalTree(root.left))
right_correct=(not root.right or root.right.val==root.val
and self.isUnivalTree(root.right))
return left_correct and right_correct
方法二:深度优先遍历
我们先进行一次深度优先遍历,获取这颗树中的所有节点的值。然后,就可以判断所有节点的值是不是都相等了。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isUnivalTree(self, root: TreeNode) -> bool:
res=[]
def dfs(node):
if node:
res.append(node.val)
dfs(node.left)
dfs(node.right)
dfs(root)
return len(set(res))==1