// Time: O(n) // Space: O(w) class Solution { public: TreeNode* findNeartestRightNode(TreeNode* root, TreeNode* u) { vector q = {root}; while (!empty(q)) { vector new_q; for (int i = 0; i < size(q); ++i) { if (q[i] == u) { return i + 1 < size(q) ? q[i + 1] : nullptr; } if (q[i]->left) { new_q.emplace_back(q[i]->left); } if (q[i]->right) { new_q.emplace_back(q[i]->right); } } q = move(new_q); } return nullptr; } };