Algorithm Leetcode上出现运行时错误;将排序数组转换为二叉搜索树“;

Algorithm Leetcode上出现运行时错误;将排序数组转换为二叉搜索树“;,algorithm,Algorithm,这里是问题链接 类解决方案{ 公众: 无效dfs(TreeNode*&p、int l、int r、vector和num){ 如果(l>r){p=NULL;返回;} p->val=num[(l+r)/2]; 树节点*左,*右; p->左=左; p->右=右; dfs(左,左,(左+右)/2-1,数字); dfs(右,(左+右)/2+1,右,数字); } TreeNode*SorterDarrayTobst(矢量和数值){ TreeNode*头; dfs(头,0,数值大小()-1,数值); 回流头;

这里是问题链接

类解决方案{
公众:
无效dfs(TreeNode*&p、int l、int r、vector和num){
如果(l>r){p=NULL;返回;}
p->val=num[(l+r)/2];
树节点*左,*右;
p->左=左;
p->右=右;
dfs(左,左,(左+右)/2-1,数字);
dfs(右,(左+右)/2+1,右,数字);
}
TreeNode*SorterDarrayTobst(矢量和数值){
TreeNode*头;
dfs(头,0,数值大小()-1,数值);
回流头;
}
};

我上面的代码出现运行时错误,但我找不到原因。您能帮助我吗?

您的TreeNode*变量都没有初始化,因此任何试图将它们用作指针的行为都是未定义的行为。我初始化了*head(0)、*left(0)和*right(0)。但也存在运行时错误。取消引用0也是未定义的行为。您需要实际分配存储空间。解决了很多问题。
class Solution {
public:
    void dfs(TreeNode *&p,int l,int r,vector<int> &num){
        if(l>r){p=NULL; return;}
        p->val=num[(l+r)/2];
        TreeNode *left,*right;
        p->left=left;
        p->right=right;
        dfs(left,l,(l+r)/2-1,num);
        dfs(right,(l+r)/2+1,r,num);
    }
    TreeNode *sortedArrayToBST(vector<int> &num) {
        TreeNode *head;
        dfs(head,0,num.size()-1,num);
        return head;

    }
};