Lỗi hàm thêm Node vào cây nhị phân

Em đang viết hàm add_Node để thêm Node vào cây nhị phân nhưng bị lỗi không add Node được khi Node gốc Root khác NULL. Mn check giúp e với ạ:

void add_Node(Node * &root,int x)
{
	Node *newNode=new Node;
	newNode->data=x;
	newNode->left=NULL;
	newNode->right=NULL;
	if(root==NULL)
	{
		root=newNode;
	}
	else
	{
		Node *g=root;
		while(g!=NULL)
		{
			if(g->data>x)
			{
				g=g->left;	
			}
			else if(g->data<x)
			{
				g=g->right;
			}
		}
		g=newNode;
	}
}

Và đây là toàn bộ code của bài ạ

#include<iostream>
using namespace std;

//Nhap vao cay nhi phan cac so nguyen
//Xuat ra man hinh cac phan tu cua cay nhi phan

struct Node
{
	int data;
	Node *left;
	Node *right;
};

void khoi_tao_cay(Node *root)
{
	root=NULL;
}

void add_Node(Node * &root,int x)
{
	Node *newNode=new Node;
	newNode->data=x;
	newNode->left=NULL;
	newNode->right=NULL;
	if(root==NULL)
	{
		root=newNode;
	}
	else
	{
		Node *g=root;
		while(g!=NULL)
		{
			if(g->data>x)
			{
				g=g->left;	
			}
			else if(g->data<x)
			{
				g=g->right;
			}
		}
		g=newNode;
	}
}

void xuat_cay_nhi_phan(Node *root)
{
	if(root ==NULL) return;
	else
	{
		cout<<root->data;
		xuat_cay_nhi_phan(root->left);
		xuat_cay_nhi_phan(root->right);
	}
}
int main()
{
	Node *root=NULL;
	for(int i=0;i<6;i++)
	{
		int a;
		cin>>a;
		add_Node(root,a);
	}
	xuat_cay_nhi_phan(root);
	return 0;
}

g không nằm trong cây :smiley:

1 Like

g được tạo ra như 1 biến chạy để đến phần tử cuối của cây trước khi thêm g vào cây mà a.
Sao g lại không thuộc cây nhỉ??

Bạn chỉ cho g trỏ vào node thôi :slight_smile: chứ đâu có sửa gì trong node đâu. Mà con trỏ g nó đã ở bên ngoài cây nên coi như bạn chưa làm gì cả.

Thực ra hàm này viết đệ quy là đẹp nhất, có tham chiếu rồi còn dễ nữa.

1 Like

Khi thêm Node vào danh sách liên kết đơn dùng cách này vẫn được mà nhỉ. Cũng là tạo 1 biến chạy đến chỗ node cần thêm rồi thêm vào mà nhỉ?
Cái này sao không áp dụng được cách ý ạ?

Ý bạn là kiểu if(p->next == NULL) p->next = new NODE(var); phải không :slight_smile:
Nếu đúng thì bạn so sánh câu này với chỗ bạn gán xem sao.

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