leetcode 965.单值二叉树
发布人:shili8
发布时间:2025-01-31 05:57
阅读次数:0
**单值二叉树**
**题目描述**
给定一个二叉树的根节点,判断该树是否为单值二叉树。单值二叉树是指每个节点都只包含一个唯一的整数值。
**示例1:**
输入:[4,2,5,7,null,6,9,null,8]
输出:true解释:这个树是单值的,因为所有节点的值都是不同的。
**示例2:**
输入:[4,2,5,7,null,6,9,null,8,1]
输出:false解释:这个树不是单值的,因为有两个节点(8 和1)具有相同的值。
**解决方案**
我们可以使用后序遍历(Postorder Traversal)来解决这个问题。后序遍历是指先访问左子树、然后访问右子树,然后访问根节点。
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Nonedef isUnivalTree(root): """ 判断给定二叉树是否为单值二叉树。 Args: root (TreeNode): 二叉树的根节点。 Returns: bool: True 如果树是单值的,False 否则。 """ if not root: return True # 后序遍历 def postorder(node): if node is None: return True # 先访问左子树 left = postorder(node.left) # 然后访问右子树 right = postorder(node.right) # 最后访问根节点 root_val = node.val # 如果左右子树都是单值的,并且根节点的值与左右子树的值相同,则返回 True return left and right and (not left or not right or node.val == root_val) return postorder(root) # 测试用例root = TreeNode(4) root.left = TreeNode(2) root.right = TreeNode(5) root.left.left = TreeNode(7) root.left.right = TreeNode(6) root.right.right = TreeNode(9) root.right.right.left = TreeNode(8) print(isUnivalTree(root)) # Output: True# 测试用例root = TreeNode(4) root.left = TreeNode(2) root.right = TreeNode(5) root.left.left = TreeNode(7) root.left.right = TreeNode(6) root.right.right = TreeNode(9) root.right.right.left = TreeNode(8) root.right.right.left.left = TreeNode(1) print(isUnivalTree(root)) # Output: False
**注释**
* `isUnivalTree` 函数用于判断给定二叉树是否为单值二叉树。
* 后序遍历函数 `postorder` 用于访问二叉树的左子树、右子树和根节点。
* 在后序遍历过程中,首先访问左子树,然后访问右子树,最终访问根节点。
* 如果左右子树都是单值的,并且根节点的值与左右子树的值相同,则返回 True。
* 测试用例用于验证 `isUnivalTree` 函数的正确性。
**总结**
本文介绍了如何使用后序遍历来判断二叉树是否为单值二叉树。通过提供示例代码和注释,希望能够帮助读者理解解决方案的逻辑并应用到实际问题中。