第一,二叉搜索树中序遍历递增有序
第二,局部逐渐改造成双链表,一个元素先初始化if语句只执行第一次。else以后每执行一次都可以看作把一个元素加入其中(即加入的元素进行了双连接,然后更新加入的元素为pre为下一次加入元素做准备)
         可以看成横向的 4(初始化p),加入下一次要访问的元素6,p指向当前元素4, pre->right = pRootOfTree;  4--》6,建立双链接, pRootOfTree->left = pre;《4------6,更新p,  pre = pRootOfTree;本来就有6---》8
        对于R(8) pre->right = pRootOfTree,就已经是这个指向的。 pRootOfTree->left = pre;建立6《-----8的连接,更新pre为8
第三再没有要求不能更改结点值的情况下,可以遍历链表取出值然后建立双向连接。空间复杂度为0(n)取值时的辅助数组,而递归最差空间复杂度为o(n),为递归栈的深度
class Solution {
public:
    //返回的第一个指针,即为最小值,先定为null fast-template
    TreeNode* head = NULL;
    //中序遍历当前值的上一位,初值为最小值,先定为null
    TreeNode* pre = NULL;
    TreeNode* Convert(TreeNode* pRootOfTree) {
        if(pRootOfTree == NULL)
            //中序递归,叶子为空则返回
            return NULL;
        //首先递归到最左最小值
        Convert(pRootOfTree->left);
        //找到最小值,初始化head与pre
        if(pre == NULL){
            head = pRootOfTree;
            pre = pRootOfTree;
        }
        //当前结点与上一结点建立连接,将pre设置为当前值
        else{
            pre->right = pRootOfTree;-----------------------------------------------------
            pRootOfTree->left = pre;
            pre = pRootOfTree;
        }
        Convert(pRootOfTree->right);
        return head;}
};