📅  最后修改于: 2023-12-03 15:13:08.079000             🧑  作者: Mango
2色树是一种有根树,在每个节点上有两种颜色,且相邻节点之间的颜色不相同。2色树可以用来描述某些图论问题,如图的涂色问题。
假设有一个2色树T,树上某个节点v有作为根节点的子树S。S中所有节点的颜色都与v相异(v的子节点有些是红色,有些是蓝色)。那么S被称为T中具有最小色差(即红色节点数和蓝色节点数的差距)的子树。
时间复杂度O(n)
class Solution:
def minDiffInBST(self, root: TreeNode) -> int:
self.prev = None
self.min_diff = float('inf')
self.dfs(root)
return self.min_diff
def dfs(self, node: TreeNode):
if not node:
return
self.dfs(node.left)
if self.prev:
self.min_diff = min(self.min_diff, node.val - self.prev.val)
self.prev = node
self.dfs(node.right)
最小色差子树在某些图论问题中具有重要作用。可以通过深度优先遍历等算法来寻找最小色差子树。