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;
}
};