01/10/2018, 15:48
Làm sao để gán tất cả các giá trị ở cây nhị phân sang mảng?
như tiêu đề ạ.
cách làm của e là tìm n: là số node hiện có trong tree. rồi e new int[n] mảng A.
giả sử đã khai báo tree rồi.
truyền vào i=0
void Gan(Tree t, *&a, int i)
{
if(t==NULL) return;
else
{
a[i]=t->info;
i++;
Gan(t->pLeft, a,i)
Gan(t->pRight, a,i)
}
}
cách này chỉ đúng trong 1 2 trường hợp thôi
e đã thử sửa nhiều rồi mà không được ạ :((, giúp e vs, e cám ơn nhiều !!!
Bài liên quan
Bạn đệ quy kiểu này sẽ ko kiểm soát được các luồng chạy. Ví dụ nhánh bên trái vừa add info vào a nhưng chưa kịp cộng i lên thì thằng bên phải cũng chạy tới đoạn ghi info --> ghi đè dẫn đến mất thì tin.
Nên khử đệ quy hoặc tạo một cơ chế ghi xuống hiệu quả hơn.
dạ e cám ơn ạ!
mọi người có thể chỉ rõ cách làm cho e được k ạ
Sửa thành
P/s: mình chỉ né thằng i++ ra thôi, sai thuật hay không thì mình không biết.
lúc này e cũng có thử cách đó rồi ạ, nhưng vẫn k được luôn,
e có làm cả cách này nữa vẫn ko đc
dd[++i]=t->dg;
khởi tạo i ban đầu là -1.
bài này trên mạng k đâu có luôn, chỉ có 1 chỗ có đề mà k có giải
Duyêt cây trật rồi, phải là Inorder Traversal: left subtree -> node -> right subtree
Nên wrap trong class Converter, chuyển từ tree sang mảng.
xl nếu e hỏi ngu ạ, giờ muốn ko dùng thư viện mà chuyển sang mảng động mình khai báo là làm sao ạ
Có 2 cách
Duyệt 2 lần, lần đầu lấy số phẩn tử size, lần 2 mới chuyển tùng phần tử từ tree sang array
Duyệt 1 lần, mảng ban đầu tạo với capacity cho trước, như 50. Lúc duyệt chuyển phần tử từ tree sang array. Nếu quá capacity thì tạo mảng mới có capacity + m, m = 16 chẳng hạn, copy mảng cũ qua, rồi duyệt tree tiếp.
Hi Nguyễn Dương.
Vì lý do gì mà bạn không muốn dùng thư viện ? Cơ bản thì tất cả những gì bạn đang dùng đều là thư viện cả.
thực ra là e đang làm cây nhị phân mà info của nó là kiểu cấu trúc gồm có: mã số, tên, họ, tuổi,… nên ở đây dùng thư viện thì e ko áp dụng sang của e cách làm của e nó chỉ đúng trong 1 vài trường hợp
Hi Nguyễn Dương.
Bạn push thẳng kiểu info vào vector.