tài liệu uy tín được biên soạn bởi giảng viên đại học Bách Khoa TPHCM, thuận lợi cho qua trình tự học, nghiên cứu bộ tự động hóa, điện tử, cơ điện tử, cơ khí chế tạo máy, lập trình nhúng, Tài liệu được kiểm duyệt bởi giảng viên, phòng đào tạo trường đại học bách khoa, lưu hành nội bộ
Trang 1Chương 5
Cây
Trang 2Nội dung
Ðịnh nghĩa các thuật ngữ.
Các phép duyệt cây.
Một số ứng dụng của cây.
Trang 3Các định nghĩa
Định nghĩa cây
mỗi phần tử được gọi là nút (node), trong đó:
y Một nút được gọi là nút gốc (root).
y Các nút còn lại được chia thành m ≥ 0 nhóm,
mỗi nhóm là một cây và được gọi là cây con (subtree).
rỗng.
Trang 4Các định nghĩa
Bậc của nút và bậc của cây
f Bậc của nút là số cây con của nút này.
f Bậc của cây là bậc lớn nhất của tất cả các nút.
(n-arity tree).
f Cây nhị phân là cây có bậc bằng 2.
Trang 5 Mức của nút và chiều cao của cây
f Mức của nút gốc bằng 1.
f Mức của nút khác nút gốc bằng mức của nút gốc của cây con nhỏ nhất chứa nút này cộng 1.
f Chiều cao của cây là mức lớn nhất của tất cả các nút lá.
Trang 6Các định nghĩa
Nút trước và nút sau
của cây có chứa nút x; nút x được gọi là nút
sau của nút y.
Nút cha, nút con và nút anh em
trước của nút x và mức của nút x bằng mức
của nút y.
cùng nút cha.
Trang 7Bậc của A là 2, bậc của C là 0.
Cây gốc A là cây nhị phân (bậc 2)
A là nút gốc, là nút cha của B, là nút trước của D, có mức bằng 1.
B là nút trung gian, là nút con của A, có mức bằng 2.
C là nút là, là nút anh em với D.
Chiều cao của cây gốc A bằng 4.
Trang 8Các phép duyệt cây
Phép duyệt cây là quá trình đi đến tất cả các nút của cây.
phép duyệt cây (dùng giải thuật đệ quy vì cây
có cấu trúc đệ quy).
y N là nút gốc.
y L là cây con bên trái.
y R là cây con bên phải.
Phép duyệt thứ tự đầu: N LR và N RL
Phép duyệt thứ tự giữa: L N R và R N L
Phép duyệt thứ tự cuối: LR N và RL N
Trang 9Các phép duyệt cây
p
p^.right p^.left
Trang 10Định nghĩa cấu trúc cây nhị phân
Trang 16new(p); p^.info := x, p^.next := nil;
else Queue.rear^.next := p;
Queue.rear := p
end ;
Trang 18Các phép duyệt cây
Thứ tự duyệt theo mức
procedure Traversing_Level (p: ref);
var Queue: queue_type;
begin
Queue_Init (Queue);
if p <> nil then Queue_Insert (Queue, p);
while not Queue_Empty (Queue) do
begin
Queue_Delete (Queue, p); writeln (p^.info);
if p^.left <> nil then
Queue_Insert (Queue, p^.left);
if p^.right <> nil then
Queue_Insert (Queue, p^.right);
end
end ;
Trang 19Một số ứng dụng của cây
Tạo cây
procedure Tree_Create ( var p: ref);
{Tạo cây gốc p gồm các nút chứa số nguyên
dương - Dùng phép duyệt cây NLR}
Lệnh gọi: Tree_Create (Root);
Trang 20Một số ứng dụng của cây
Với dãy số nhập vào là 1 3 0 0 4 2 0 0 5 0 0
thì quá trình tạo cây theo thủ tục Tree_Create như
Trang 22Một số ứng dụng của cây
Tìm chiều cao của cây
function Tree_Height (p: ref): integer;