题目描述:
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回 true;否则返回 false。
解题流程:
第一种思路:
首先使用深度优先搜索,获取树中所有的值,然后就容易判断节点是否相等了。
# 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:
vals=[]
def dfs(node):
if node:
vals.append(node.val)
dfs(node.left)
dfs(node.right)
dfs(root)
return len(set(vals))==1
第二种思路:
一颗树是单值的,当且仅当根节点的子节点所在的子树也是单值的,同时根节点的值与子节点的值相同。
我们可以使用递归实现这个判断的过程。left_correct 表示当前节点的左孩子是正确的,也就是说:左孩子所在的子树是单值的,并且当前节点的值等于左孩子的值。right_correct 对当前节点的右孩子表示同样的事情。递归处理之后,当根节点的这两种属性都为真的时候,我们就可以判定这颗二叉树是单值的。
class Solution(object):
def isUnivalTree(self, root):
left_correct = (not root.left or root.val == root.left.val
and self.isUnivalTree(root.left))
right_correct = (not root.right or root.val == root.right.val
and self.isUnivalTree(root.right))
return left_correct and right_correct
第二种没怎么看懂
总结:
None