/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* @author Senky
* @date 2023.08.01
* @par url https://www.nowcoder.com/creation/manager/content/584337070?type=column&status=-1
* @param pRootOfTree TreeNode类
* @return TreeNode类
*/
// Helper function to perform in-order traversal and convert to double linked list
struct TreeNode* convertBSTToDLL(struct TreeNode* root, struct TreeNode** prev) {
if (root == NULL) {
return NULL;
}
// Convert left subtree
struct TreeNode* left = convertBSTToDLL(root->left, prev);
// Adjust pointers
root->left = *prev;
if (*prev != NULL) {
(*prev)->right = root;
}
*prev = root;
// Convert right subtree
struct TreeNode* right = convertBSTToDLL(root->right, prev);
// Return the head of the doubly linked list
return (left != NULL) ? left : root;
}
struct TreeNode* Convert(struct TreeNode* pRootOfTree)
{
struct TreeNode* prev = NULL;
return convertBSTToDLL(pRootOfTree, &prev);
}