30/09/2018, 20:20

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<<"	 "<<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);
}
Gió viết 22:36 ngày 30/09/2018

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

... viết 22:20 ngày 30/09/2018

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

Sáng Béo viết 22:32 ngày 30/09/2018

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

... viết 22:23 ngày 30/09/2018

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

Gió viết 22:27 ngày 30/09/2018

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

Creattree(Node *& root,...)
... viết 22:30 ngày 30/09/2018

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

Bài liên quan
0