Java. 100% faster. Easy to understand
\nclass Solution {\n    \n    private int countOpenNodes(TreeNode n, int selected) {\n        if(n == null || n.val == selected) { return 0; }\n        \n      
```\nclass Solution {\n    \n    private int countOpenNodes(TreeNode n, int selected) {\n        if(n == null || n.val == selected) { return 0; }\n        \n        return 1 + countOpenNodes(n.left, selected) + countOpenNodes(n.right, selected);\n    }\n    \n    private TreeNode findNode(TreeNode n, int val) {\n        if(n == null || n.val == val) { return n; }\n                \n        TreeNode found = findNode(n.left, val);\n        if(found != null) { return found; }\n        \n        return findNode(n.right, val); \n    }\n    \n    public boolean btreeGameWinningMove(TreeNode root, int n, int x) {\n        \n        TreeNode selected = findNode(root, x);\n        \n        int leftCnt = countOpenNodes(selected.left, x);\n        int rightCnt = countOpenNodes(selected.right, x);\n        int parentCnt = n - (1 + leftCnt + rightCnt);\n        \n        if(parentCnt > 1 + leftCnt + rightCnt) { return true; }\n        if(rightCnt > 1 + parentCnt + leftCnt) { return true; }\n        if(leftCnt > 1 + parentCnt + rightCnt) { return true; }\n        \n        return false;\n    }\n}\n```
[]