При обходе дерева вы используете условие p->left!= NULL OR p->right!= NULL
. В этом случае, если слева от вашего дерева не NULL, в этом случае вы назначаете NULL для p. Затем вы сравниваете данные с данными переменной NULL. Это вызывает ошибку сегментации. Вы должны добавить оператор AND вместо OR к условию while:
while(p->left!=NULL && p->right!=NULL){
Также в этой строке if(data>>p->data){
вы используете оператор сдвига вправо вместо оператора большего размера. Вы должны напечатать это правильно.