Explanation for recursive & short C# [100% speed and memory]
Fairly simple.\n\n Since we\'re following the parent pointer, treat the binary tree as a graph\n The x divides the graph into at most 3 subgraphs (left, right, 
Fairly simple.\n\n* Since we\'re following the parent pointer, treat the binary tree as a graph\n* The ```x``` divides the graph into at most 3 subgraphs (left, right, parent)\n* The optimal move is to play adjacent to ```x``` so we can colour one of the three subgraph \n* If any one of the 3 subgraphs has a count greater than the sum of the other two, then we can win\n\n----\n\n* Get a reference to the node with value ```x```\n* Calculate the counts of the left and right subtree\n* Skip turning the solution into a graph problem via maths: parentCount = ```n``` - (dividing node + count(left) + count(right))\n* Check to see if any of the counts is larger than the sum of the other two\n\n```\npublic bool BtreeGameWinningMove(TreeNode root, int n, int x)\n{\n    int Count(TreeNode node) => node == null ? 0 : Count(node.left) + Count(node.right) + 1;\n\n    TreeNode Find(TreeNode current, int needle) \n    {\n        if (current == null) { return null; }\n        if (needle == current.val) { return current; }\n        return Find(current.left, needle) ?? Find(current.right, needle);\n    }\n\n    TreeNode main = Find(root, x);\n    int leftCount = Count(main.left), rightCount = Count(main.right);\n    int parentCount = n - (leftCount + rightCount + 1);\n\n    return parentCount > (leftCount + rightCount) || \n        leftCount > (parentCount + rightCount) || \n        rightCount > (leftCount + parentCount);\n}\n```\n\nRuntime: 84 ms, faster than 100.00% of C# online submissions for Binary Tree Coloring Game.\nMemory Usage: 23.7 MB, less than 100.00% of C# online submissions for Binary Tree Coloring Game.
['Binary Tree']