Hàm trả về node* và typedef struct node* tree trong cây nhị phân

ai giải thích cho em node* trong đây được không ạ?

struct node
{
	int key;
	node*pleft;
	node*pright;

};
typedef node* tree;
node* createnode(int x)
{
	node*n = new node();
	n->key = x;
	n->pleft = NULL;
	n->pright = NULL;
	return n;
}

Node* là một con trỏ kiểu node thôi, không hiểu bạn thắc mắc gì lắm ;))

1 Like

hàm trả về node* đó bạn node* createnode(int x), bạn giải thich cho mình chỗ đó đc k?
còn node* init_tree(node* &root) trong đó node* &root để làm gì vậy?

Bạn muốn giải thích cái gì nhỉ, chỉ là trả về một con trỏ thôi mà hmm… Đôi khi muốn giải thích cái quá cơ bản rất khó, bạn phải cho mọi người biết bạn không hiểu cái gì. Nếu hoàn toàn không hiểu cái gì hết thì sẽ có cách giải thích khác.

em biết con trỏ thì trỏ đến 1 vùng nhớ kiểu tham chiếu có thể thay đổi giá trị con trỏ và cả vùng nhớ. còn hàm node* này là trả về con trỏ nghĩa là sao anh thiệt là em hơi mù mở về chỗ này.? còn node* init_tree(node* &root) , node * &root, khai báo con trỏ root kiểu node kèm theo & là gì anh.?

Có nghĩa là nó trả về một con trỏ. Em không hiểu con trỏ là cái gì. Con trỏ là một biến thôi, biến con trỏ.

Hàm này trả về một biến, biến đó là biến con trỏ, tức là một con trỏ đấy.

Em hiểu hàm trả về kiểu int không?

int tinh_tong(int a, int b)

Hàm này trả về biến kiểu int.

Tương tự

int * ting_tong(int a, int b)

trả về biến con trỏ kiểu int


& là reference. Đừng “sợ” tiếng anh, đừng sợ reference là cái gì ghê gớm. Reference cho phép mình thay đổi giá trị của biến khi mình gửi nó vào hàm.

Để hiểu node * & root là gì thì mình thử đọc tên của nó lên. Trong C/C++ có một quy tắc đọc rất đơn giản, đọc tử phải sang trái.

rootreference đến con trỏ kiểu node.

Như anh đã nói ở trên, reference cho phép mình thay đổi con trỏ. Vậy có nghĩa root là con trỏ mà thay đổi được địa chỉ của nó khi gửi vào hàm.

OK. Tới đây thì nó bắt đầu phức tạp rồi. Để giải thích cái này thì em phải hiểu khi truyền một biễn vào trong hàm ta có 3 cách truyền

  1. Truyền tham trị (pass by value)
  2. Truyền con trỏ (pass by pointer)
  3. truyền tham chiếu (pass by reference)

Anh khuyến khích sử dụng tiếng anh, bởi vì anh không khoái tham trị và tham chiếu tí nào. Tham trị và tham chiếu không phải là tiếng Việt thuần, nó là Hán Việt. Mà đã là Hán Việt thì có từ dễ hiểu, từ khó hiểu, Tham Trị và tham chiếu là hai từ lạ hoắc. Cuối cùng vẫn phải học tham trị là gì, tham chiếu là gì rồi phải học pointer, reference, value là gì. Ôi giáo dục.

Em tìm hiểu 3 cách truyền này trên channel youtube của anh

Bài 41, 42, 43 em sẽ hiểu tham chiếu(reference) là gì.

Khi em hiểu khái niệm đó, em nên học tiếp pointer là gì.

Khi em hiểu hai cái đó mà vẫn chưa hiểu * & là gì thì anh sẽ giải thích cho em tiếp.

1 Like

em tks anh em hiểu rồi.

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