-1
int count(struct node *root,struct node *p,struct node *q)
{
if(!root)
return 0;
int matches=count(root->left,p,q)+count(root->right,p,q);
if(root->data==p->data||root->data==q->data)
return 1+matches;
else
return matches;
}
struct node *lca(struct node *root,struct node *p,struct node *q)
{
if(!root||!p||!q)
return 0;
int totalmatches=count(root->left,p,q);
if(totalmatches==1)
return root;
else if(totalmatches==2)
return lca(root->left,p,q);
else
return lca(root->right,p,q);
}
int main()
{
struct node *root = newNode(20);
root->left = newNode(8);
root->right = newNode(22);
root->left->left = newNode(4);
root->left->right = newNode(12);
root->left->right->left = newNode(10);
root->left->right->right = newNode(14);
struct node *p=newNode(8);
struct node *q=newNode(14);
struct node *t = lca(root, p, q);
printf("LCA of %d and %d is %d \n", p->data, q->data, t->data);
return 0;
}
Приведенный выше код печатает самый низкий общий предок BST. Он работает нормально для всех случаев, кроме этого случая. Отображаемая ошибка представляет собой ошибку сегментации.Почему следующий код показывает ошибку?
Можем ли мы увидеть функцию newNode? – Igor
Вы пробовали отлаживать? –
У вас есть тестовый файл, который многократно генерирует segfault, и вы не можете найти ошибку? –