Mình góp ý một chút:
+ Bạn đã hiện thực hàm trước khi sử dụng hàm này trong main -> ko cần khai báo mẫu hàm ( prototype ) int chennut(nut *p,int x); và void duyetcay(nut *p);
+ Bạn khai báo nut *p; trong hàm main, điều đó ko có nghĩa là p = NULL ( khi khai báo vậy, p trỏ tới một vị trí nhớ nào đó trong bộ nhớ nhưng nó ko đồng nghĩa với NULL ) nên khi bạn gọi chennut(p,x); đối với nút đầu tiên sẽ là chèn vào p->left hoặc p->right => có thể can thiệp tới những vùng nhớ khác và gây lỗi.
+ Đối với lần đầu tiên gọi hàm chennut(p,x), p là NULL nên sau khi thực hiện hàm chèn này, p sẽ trỏ tới nút gốc ( nghĩa là đã thay đổi trị trong con trỏ p ) => phải dùng tham chiếu.
Như vậy, bạn cần sửa:
+ int chennut(nut *&p,int x);
+ nut *p = NULL ( trong main)
Bạn cũng nên xem qua cách xây dựng cây trong các sách về Cấu trúc dữ liệu. Thường chúng khá chuẩn và đẹp mắt![]()
Thân!