如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回 true
;否则返回 false
。
节点类:
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None
示例 1:
输入:[1,1,1,1,1,null,1]
输出:true
示例 2:
输入:[2,2,2,5,2]
输出:false
提示:
给定树的节点数范围是 [1, 100]。
每个节点的值都是整数,范围为 [0, 99] 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/univalued-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析:
对于二叉树的题目大部分都是使用递归算法。
1.使用递归,将所有的树的节点值添加到一个集合中,集合有自动去重功能,所以,如果最后set的长度大于1,说明有重复的值。返回false,否则返回True。
2.使用递归,判断节点值是否和左孩子和右孩子节点值相同,如果相同,则递归调用函数,将值变为左孩子和右孩子的与,只要有一个非根节点不和左孩子或右孩子相同,则返回false。
代码实现:
class Solution: def isUnivalTree(self, root): if root == None: return True if root.left == None and root.right == None: return True if root.left != None and root.left.val != root.val: return False if root.right !=None and root.right.val != root.val: return False return self.isUnivalTree(root.left) and self.isUnivalTree(root.right)
总结。
在递归过程中,巧用最后一个节点,将所有结果都如同最后一个几点一样计算,分析情况。
递归的几个组成:
1.终止条件。
一般写在循环体的前面。
2.返回值,
一般需要具体的值。
3.返回本函数。
将一个值作为函数的参数,返回函数的值。