01/10/2018, 16:13

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;
}
rogp10 viết 18:26 ngày 01/10/2018

g không nằm trong cây

Nguyễn Hữu Thanh viết 18:16 ngày 01/10/2018

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ỉ??

rogp10 viết 18:28 ngày 01/10/2018

Bạn chỉ cho g trỏ vào node thôi 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.

Nguyễn Hữu Thanh viết 18:18 ngày 01/10/2018

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 ý ạ?

rogp10 viết 18:24 ngày 01/10/2018

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

Bài liên quan
0