Hix chắc ý bạn là xóa 1 nút chứ, nếu đã là cây nhị phân thì xóa ít nhất là 0 nút để trở thành 1 cây nhị phân. Nếu tui nói sai thì cho ví dụ lại nhá. Còn xóa 1 nút bất kì thì trong sách có hết mà.
Có bác nào giúp Schtroumpfs với, cái đề nó kiu là xóa một node nào đó trong cây nhị phần tìm kiếm sao cho khi xóa node ấy thì các node con của nó sẽ mất đi với số lượng ít nhất đồng thời thỏa mãn cây sau khi xóa vẫn là cây nhị phân tìm kiếm
Em chỉ biết mỗi thuật giải xóa một phần tử X nào đó thui hà![]()
Đã được chỉnh sửa lần cuối bởi schtroumpfs : 27-05-2007 lúc 07:59 PM.
Hix chắc ý bạn là xóa 1 nút chứ, nếu đã là cây nhị phân thì xóa ít nhất là 0 nút để trở thành 1 cây nhị phân. Nếu tui nói sai thì cho ví dụ lại nhá. Còn xóa 1 nút bất kì thì trong sách có hết mà.
Dạ! giả sử như cây mình có 10 node, khi mình xóa 1 node nào đó thì các node con dưới nó sẽ mất đi, và giả sử ta có các trường hợp
xóa node A thì làm mất 2 node con
xóa node B thì làm mất 3 node con
xóa node C thì làm mất 7 node con
------> như vậy ta chọn cách xóa node A
ý em là thế ạh![]()
Hông bít như dzậy có rõ nghĩa chưa nữa
Cám ơn mấy bạn nhìu ^_^
Hix, vẫn chưa hiểu, tức là nhập vô 3 hay 4 nút để xóa, rồi chương trình sẽ chọn ra 1 nút xóa ít nhất. Chứ nếu bắt buộc xóa 1 nút bất kì thì cứ nút lá mà xóa chứ nhỉ?
nhưng sau khi xóa node lá liệu nó có còn là cây nhị phân tìm kiếm nữa ko nhỉ,
nhưng em vẩn ko biết được làm cách nào cho nó xóa một cách tự động,để thỏa mãn kia
Hè,tất nhiên là còn rồi, thử đi rồi biết!!
híc, em đang pótay cái vụ để nó xóa tự động muhphải chi chỉ định xóa node nào còn đỡ, còn cái này cho nó xóa ngẫu nhiên, em pó chiếu
hè, ngẫu nhiên, ờ... hàm xóa :
viết trên đây nhìn hơi rối, nhưng tui nghĩ xóa random nó vậy, ko biết có ý kiến bào hay hơn ko?Code:xoa(NUT *gốc) { NUT*p=gốc; if (gốc->trái==NULL || gốc->phải==NULL) delete p; else if (gốc->trái==NULL) xóa(gốc ->phải); else if(gốc->phải==NULL) xóa(gốc->trai); else if(random(1 hoặc 0)) xóa (gốc ->trai); else xóa(gốc-> phải); }