Cây nhị phân tìm kiếm, chạy nhưng không in ra kết quả là sao?

Mn xem giúp mk bài này. Nó có chạy nhưng không in ra kết quả là sao?

#include<iostream>
using namespace std;
struct Node {
	int data;
	Node *left;
	Node *right;
};
Node *getnode(int x){
	Node *p=new Node();
	p->data=x;
	p->left= p->right=NULL;
	return p;
}
Node *findinsert(Node *root,int x){
	if(root==NULL){
		return NULL;
	}
	Node *p=root;
	Node *f=p;
	while(p!=NULL){
		f=p;
		if(p->data>x) p->left;
		else p=p->right;
		return f;
	}
}
void insertnode(Node * &root,int x){
	Node *n=getnode(x);
	if(root=NULL){
		root=n;
		return ;
	}
	else {
		Node *f=findinsert(root,x);
		if(f!=NULL){
			if(f->data>x) f->left=n;
			else f->right=n;
		}
	}
}
void createtree(Node *root, int a[],int n){
	for(int i=0;i<n;i++)
	insertnode(root,a[i]);
}
void NLR(Node *root){
	cout<<" hien thi: ";
	if(root!=NULL){
		cout<<"\t "<<root->data;
		NLR(root->left);
		NLR(root->right);
	}
}
int main(){
	Node *root=NULL;
	int a[]={5,10,7,9,2,13,20};
	int n=7;
	createtree(root,a,n);
//	cout<<"NLR: ";
	NLR(root);
}

Vòng while ở hàm findinsert chạy nhiều hơn 1 lần. Bạn phải cho return f ra ngoài

t thử rồi nhwung không được bạn ạ

trong hàm findinsert phải là p = p->left chứ

à, lỗi đấy t sửa rồi rồi nhưng không được

Sửa hàm createtree nữa. Vì root thay đổi khi ra khỏi hàm đó

Creattree(Node *& root,...)

lại càng k đk. bạn tải code về xem hộ mk xem

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?