方法1
dfs: The best strategy is to select the neighbors of Node(x). if player2 selects Node(x).left, then all nodes in the left subtree will be blue; if player2 selects Node(x).right, then all nodes in the right subtree will be blue; if player2 selects node(x).parent, then the other side of the parent of will be blue. So in these three conditions, any one could get the blue nodes > n // 2, return True
time complexity: O(n)
space complexity: stack space, O(n)
class Solution:
def btreeGameWinningMove(self, root: TreeNode, n: int, x: int) -> bool:
self.count_left, self.count_right = 0, 0
self.dfs(root, x)
if self.count_left > n // 2 or self.count_right > n // 2 or self.count_left + self.count_right + 1 <= n // 2:
return True
return False
def dfs(self, root, x):
if not root:
return 0
left = self.dfs(root.left, x)
right = self.dfs(root.right, x)
if root.val == x:
self.count_left = left
self.count_right = right
return left + right + 1