小伙子个人理解,递归解决问题要注意两个点:起始点和终止点

就题目的描述:起始点是10,终止点是任一叶子结点(比如4)

在处理起始点10时,可以认为10左边的点4,6,8和右边的结点12,14,16已经被分别处理成了双向链表

并且题目要求返回双向链表的头结点,所以10的左边返回的是结点4,右边返回的是结点12

所以10在连接左边时,需要先找到左边双向链表中最右边的值,然后进行连接

10连接右边时,直接连接右边返回的结点即可

连接后,要返回最左边的结点

在处理终止点(这里举例结点4)时,则分别看它左右结点是否为空(这里使用的方法是直接调用convert函数,而不是通过左右指针),如果为空则什么都不做

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    TreeNode* Convert(TreeNode* pRootOfTree) {
        TreeNode* answer = nullptr;
		TreeNode* temp = nullptr;
		if(pRootOfTree == nullptr){
			return nullptr;
		}
		temp = Convert(pRootOfTree->left);
		if(temp == nullptr){
			;
		}else{
			while (temp->right!=nullptr) {
				temp = temp->right;
			}
			temp->right = pRootOfTree;
			pRootOfTree->left = temp;
		}
		temp = Convert(pRootOfTree->right);
		if(temp == nullptr){
			;
		}else{
			pRootOfTree->right = temp;
			temp->left = pRootOfTree;
		}
		temp = pRootOfTree;
		while(temp->left!=nullptr){
			temp = temp->left;
		}
		answer = temp;
		return answer;
    }
};