当前位置:实例文章 » 其他实例» [文章]leetcode 965.单值二叉树

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` 函数的正确性。

**总结**

本文介绍了如何使用后序遍历来判断二叉树是否为单值二叉树。通过提供示例代码和注释,希望能够帮助读者理解解决方案的逻辑并应用到实际问题中。

其他信息

其他资源

Top