Эта функция
treenode** find( treenode** n, int i ){
if((*n)->val==i)
return n;
else if((*n)->val<=i)
return find(&((*n)->right), i);
else if((*n)->val>=i)
return find(&((*n)->left), i);
else
return n;
}c
может вызывать неопределенное поведение, когда указатель *n
равен nullptr
, то есть, когда двоичное дерево поиска пусто.
Функция может выглядеть следующий способ
treenode ** find( treenode **n, int i )
{
if ( *n == nullptr )
{
return n;
}
else if ( i < ( *n )->val )
{
return find( &( *n )->left, i );
}
else if ( ( *n )->val < i )
{
return find( &( *n )->right, i );
}
else
{
return n;
}
}
и другая функция находят, что она должна быть постоянной функцией-членом, может выглядеть как
const treenode * find( treenode *n, int i ) const
{
if ( n == nullptr )
{
return n;
}
else if( i < n->val )
{
return find( n->left, i );
}
else if( n->val < i )
{
return find( n->right, i );
}
else
{
return n;
}
}
Я предполагаю, что конструктор, использованный в этом операторе
*res = new treenode(i);
устанавливает элементы данных left
и right
в nullptr
.