Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

đề 12

Câu 1

* khái niệm cây nhị phân: (0.5 đ)

Cây nhị phân là một cây, trong đó số con tại mỗi đỉnh trên cây tối đa là 2 con và được sắp thành cây con trái và cây con phải

* Có hai phương pháp cơ bản để cài đặt cây nhị phân:

a) Cài đặt cây nhị phân bằng mảng: (0.5 đ)

Const n = <số đỉnh tối đa trên cây> ;

Type Nut = Record

Infor: Integer;

Left, Right: 0 .. n;

End;

TreeBina = array[1..n] of Nut;

Var T : TreeBina;

b) Cài đặt cây nhị phân bởi con trỏ: (0.5 đ)

Type TreeBina = ^ Nut;

Nut = Record

Infor: Integer;

Left, Right: TreeBina;

End;

Var T : TreeBina;

* Ưu nhược điểm của từng dạng cài đặt: (0.5 đ)

a) Cài đặt bởi mảng:

Ưu điểm: - Các phép toán thực hiện tương đối dễ dàng

- việc truy cập đến các đỉnh trên cây là trực tiếp, tốc độ truy cập là nhanh và đồng đều đối với mọi phần tử

Hạn chế: - Khi cài đặt gây hiện tựợng dư thừa bộ nhớ.....

b) Cài đặt bởi con trỏ

Ưu điểm: - Không có hiện tượng dư thừa bộ nhớ

Hạn chế: - Truy cập đến các phần tử trên cây là truy cập tuần tự, bao giờ cũng xuất phát từ gốc, nên tốc đọ truy cập là chậm

- .....

Câu 2

+ Dạng cài đặt cây NPTK sử dụng con trỏ: (0.5 đ)

Type TreeBSearch = ^Nut;

Nut = Record

Infor: Integer;

Left, Right: TreeBSearch;

End;

Var R : TreeBSearch;

+ Tạo cây nhị phân tìm kiếm: (1 đ)

- Viết thủ tục thêm một đỉnh x vào cây R: Insert(x, R):

* Sử dụng con trỏ phụ M chứa địa chỉ của nút cần thêm

* Xin MT cấp phát ô nhớ cho M

* Đổ dữ liệu cần thêm vào ô nhớ có địa chỉ M

* Gắn M vào cây:

Nếu Cây rỗng (R = nil): R := M

Nếu cây không rỗng: Xác định vị trí thêm M:

If (x<R^.info) then Insert (x, R^.Left)

Else if (x>R^.info) then Insert(x, R^.right);

else thông báo x đã có trên cây

- Trong khi điều kiện nhập chưa thỏa mãn tính dừng (x<>0):

• Nhập dữ liệu mới cần thêm x,

• Liên tiếp gọi thủ tục thêm đỉnh mới vào cây: Insert(x,R);

+ Tìm xem trên cây có đỉnh nào có thông tin = x không? (1 đ)

- Nhập x

- Sử dụng con trỏ phụ p duyệt bắt đầu từ gốc đến khi p = nil hoặc tìm thấy thì dừng: Nếu p^.info = x => thông báo tìm thấy và dừng giải thuật, Nếu x< P^.Infor: Tìm nhánh trái p => p := p^.left, ngược lại tìm nhánh phải P => p := p^.right

(Có thể viết giải thuật dưới dạng đệ quy)

+ Loại bỏ đỉnh có khóa x trên cây: (1 đ)

Cách làm:

- Tìm x, p là con trỏ trỏ tới đỉnh có khóa x trên cây

- Nếu đỉnh loại bỏ là lá ( p^.left = nil; p^.right = nil): Dispose(p)

- Nếu đỉnh loại bỏ có một con khác rỗng, một con = rỗng: Treo cây con khác rỗng vào vị trí loại bỏ, giải phóng p

- Nếu đỉnh loại bỏ có cả hai cây con đều khác rỗng: Treo cây con trái vào vị trí loại bỏ, Treo cây con phải và vị trí trái nhất của cây con trái, giải phóng p

+ Đếm số đỉnh hiện có trên cây: (0.5 đ)

Cách làm: Có thể sử dụng một trong các phương pháp duyệt cây để đếm số đỉnh

Câu 3

a) Cây biểu thức: (1 đ)

+ Duyệt cây biểu thức theo thứ tự trước => Kết quả là biểu thức tiền tố: *+*2xy**-*5ab-*5ab-*5ab (0.5 đ)

+ Duyệt cây biểu thức theo thứ tự sau = > Kết quả là biểu thức hậu tố: 2x*y+*5a+-b5a*-b*5a*-b** (0.5 đ)

Bạn đang đọc truyện trên: Truyen247.Pro

Tags: