Iterative BFS, python with my explanation
There are three "zones" in the tree:\n1. Left subtree under Red\n2. Right subtree under Red\n3. The remainder of the tree "above" Red\n\nBlue can pick the left 
There are three "zones" in the tree:\n1. Left subtree under Red\n2. Right subtree under Red\n3. The remainder of the tree "above" Red\n\nBlue can pick the left child, right child, or parent of Red to control zones 1, 2, or 3, respectivley.\n\nTherefore we count the number of nodes in two of the zones. The third zone is simply n - sum(the other two zones) -1\n\nIf one of the zones is larger than the other two combined (plus 1 for the Red node), then we (Blue) can control it and win the game. Otherwise we lose :(\n\nSo I utilized a BFS to iterativley count Zone 3 first , leaving aside Red and its subtree(s) for the next BFS. Comments below:\n\n```python\nfrom collections import deque\ndef btreeGameWinningMove(self, root: TreeNode, n: int, x: int) -> bool:\n\toutside_red, red_ltree, red_rtree = 0, 0, 0\n\tred_node = None\n\tq = deque([root])\n\twhile len(q):\n\t\tcurr_node = q.pop()\n\t\tif curr_node.val ==x:\n\t\t\t# we won\'t append any children this go-around\n\t\t\tred_node = curr_node\n\t\telse:\n\t\t\toutside_red += 1\n\t\t\tq.extendleft([x for x in [curr_node.left, curr_node.right] if x])\n\t#now check left subtree. If it\'s empty that makes our job easier because red_rtree = n-outside_red-1\n\tif red_node.left:\n\t\tq.append(red_node.left)\n\t\twhile len(q):\n\t\t\tcurr_node = q.pop()\n\t\t\tred_ltree +=1\n\t\t\tq.extend([x for x in [curr_node.left, curr_node.right] if x])\n\telse:\n\t\tred_ltree = 0\n\tred_rtree = n - outside_red - red_ltree - 1\n\t[low, med, high] = sorted([outside_red, red_ltree, red_rtree])\n\treturn high > med+low+1\n\t\t```
['Breadth-First Search', 'Python3']