class Solution {
  public:
    TreeNode* dfs(TreeNode* pRootOfTree) {
        if (pRootOfTree == nullptr)return nullptr;
        TreeNode* le = dfs(pRootOfTree->left), *ri = dfs(pRootOfTree->right),*temp = le;
        if (temp != nullptr) {
            while (temp->right != nullptr)temp = temp->right;
            temp->right = pRootOfTree;
            pRootOfTree->left = temp;
        }
        else le=pRootOfTree;
        if (ri != nullptr)ri->left = pRootOfTree, pRootOfTree->right = ri;
        return le;
    }
    TreeNode* Convert(TreeNode* pRootOfTree) {
        if (pRootOfTree == nullptr)return nullptr;
        return dfs(pRootOfTree);
    }
};