Tài liệu Chương 3: cây pdf

28 524 1
Tài liệu Chương 3: cây pdf

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

CHƯƠNG 3- CÂY Chương 3: Cây 3.1 Các khái niệm 3.2 Cây nhị phân 3.2.1 Định nghĩa tính chất 3.2.2 Biểu diễn nhị phân 3.2.3 Duyệt nhị phân 3.1 CÁC KHÁI NIỆM CƠ BẢN  Khái niệm cây: – Cây gồm tập hợp hữu hạn nút-node – Có quan hệ thứ tự phận (cha-con) nút – Có nút đặc biệt, không nút tổ tiên nút cây, gọi nút gốc (root) – Cây khơng có nút gọi rỗng 3.1 CÁC KHÁI NIỆM CƠ BẢN  Bậc – degree – nút số  Nút (leaf) –terminal node – nút khơng có con, bậc nút  Ngược với nút nút có con, gọi nút phân nhánh hay nút trung gian (internal node)  Bậc bậc cao nút  Cây nhị phân bậc Nếu có bậc cao ta gọi nhiều nhánh 3.1 CÁC KHÁI NIỆM CƠ BẢN  Mức – level – đẳng cấp nút mơ hình phân cấp Quy ước nút gốc có mức 1, nút cha có mức i nút có mức i +  Chiều cao – height – hay gọi chiều sâu – depth – mức lớn nút  Đường – path – từ nút p đến nút q dãy nút p = n1,n2,…,nk = q cho ni cha ni+1 3.1 CÁC KHÁI NIỆM CƠ BẢN  Độ dài đường – path length – số cung nối cặp hai nút đường đi, số nút trừ  Cây có thứ tự - ordered tree – mà có xét đến thứ tự nút Nói nơm na có xét đến quan hệ “anh em”  Con trưởng hay cực trái nút thứ quan hệ thứ tự nút cha  Em liền kề nút nút đứng sau quan hệ thứ tự nút cha  Rừng – forest- danh sách hữu hạn 3.2 CÂY NHỊ PHÂN 3.2.1 Định nghĩa tính chất 3.2.2 Biểu diễn nhị phân 3.2.3 Duyệt nhị phân 3.2.1 ĐỊNH NGHĨA VÀ TÍNH CHẤT  Cây nhị phân bậc 2, nút có nhiều hai  Cây nhị phân có xét đến thứ tự, phân biệt thứ nhất, thứ hai gọi trái phải Ba nhị phân có số nút có cấu trúc khác 3.2.1 ĐỊNH NGHĨA VÀ TÍNH CHẤT  Tính chất của nhị phân: – Số lượng tối đa của mỗi nút ở mức i nhị phân là 2i-1 (i ≥ 1) – Số lượng tối đa của mỗi nút nhị phân có chiều cao h là 2h -1 (h ≥ 1) ( Chứng minh) 3.2.1 BIỂU DIỄN CÂY NHỊ PHÂN  Biểu diễn nhị phân cấu trúc mảng  Biểu diễn nhị phân danh sách nút  Biểu diễn nhị phân móc nối nút 10 3.2.1 BIỂU DIỄN CÂY NHỊ PHÂN BẰNG CẤU TRÚC MẢNG  Phép xác định nút trái phải: nút số mảng i có trái số 2i phải số 2i+1  Phép xác định nút cha: nút số mảng j có cha số [j/2]  Phép duyệt: phép duyệt mảng 14 3.2.1 BIỂU DIỄN CÂY NHỊ PHÂN BẰNG CẤU TRÚC MẢNG  Ưu điểm: – Triển nhanh – Truy cập nhanh chóng vào nút nào, chi phí truy cập đồng cho nút  Nhược điểm: – Rất phí chỗ “gầy”, khuyết nhiều nút – Khó khăn việc bổ sung, loại bỏ các phần tử 15 3.2.2 BIỂU DIỄN CÂY NHỊ PHÂN BẰNG CÁCH LƯU TRỮ MÓC NỐI  Nhược điểm của việc lưu trữ nhị phân bằng cấu trúc mảng là khó và mất thời gian việc bổ sung, loại bỏ các nút thường xuyên, để khắc phục ta có thể lưu trữ bằng cách lưu trữ móc nối  Trường hợp này ta móc nối trực tiếp nút cha với nút bằng trỏ 16 BIỂU DIỄN CÂY NHỊ PHÂN BẰNG MÓC NỐI CÁC NÚT  Cấu trúc nút gồm trường: – Data: chứa liệu; – Left: trỏ đến nút trái – Right: trỏ đến nút phải typedef int element_type; typedef struct node { element_type element; struct node *left, *right; } NODE; 17 BIỂU DIỄN CÂY NHỊ PHÂN BẰNG MÓC NỐI CÁC NÚT  Cây trỏ trỏ đến nút gốc Kiểu Ref kiểu trỏ đến nút; 18 BIỂU DIỄN CÂY NHỊ PHÂN BẰNG MĨC NỐI CÁC NÚT  Phép tốn sở: – Phép xác định trái: V=*V.Left – Phép xác định phải: V=*V.right – Phép xác định nút cha: khó xác định nên phải thêm trỏ cha cấu trúc – Phép duyệt trình bày sau: 19 BIỂU DIỄN CÂY NHỊ PHÂN BẰNG MÓC NỐI CÁC NÚT  Ưu điểm: – Rất linh hoạt phép toán thêm vào, lấy nút, – Khơng lãng phí vùng nhớ “gầy”  Nhược điểm: – Rất phức tạp biểu diễn 20 PHÉP DUYỆT CÂY  Duyệt theo thứ tự trước (Preoder traversal)  Duyệt theo thứ tự (Inoder traversal)  Duyệt theo thứ tự sau (Postorder traversal) 21 THỦ TỤC PREORDER  Nếu rỗng thì không làm gì cả  Nếu không rỗng thì: – Thăm gốc – Duyệt trái theo thứ tự trước – Duyệt phải theo thứ tự trước 22 THỦ TỤC PREORDER void Preorder(NODE *root) { if (root != NULL) { coutleft); Preorder (root->right); } } 23 THỦ TỤC INORDER  Nếu rỗng thì không làm gì cả  Nếu không rỗng thì: – Duyệt trái theo thứ tự giữa – Thăm gốc – Duyệt phải theo thứ tự giữa 24 THỦ TỤC INORDER void Inorder(NODE *root) { if (root != NULL) { Inorder (root->left); coutright); } } 25 THỦ TỤC POSTORDER  Nếu rỗng thì không làm gì cả  Nếu không rỗng thì: – Duyệt trái theo thứ tự sau – Duyệt phải theo thứ tự sau – Thăm gốc 26 THỦ TỤC POSTORDER void Postorder(NODE *root) { if (root != NULL) { Postorder (root->left); Postorder (root->right); coutelement; } } 27 Bài tập Bài 1.Viết chương trình thực hiện các công việc sau  Khởi tạo và nhập giá trị của một  Viết các chương trình duyệt theo thứ tự trước, giữa, sau (không dùng đệ quy) Bài 2: Làm các bài tập chương 6, trang 143146 sách Cấu trúc liệu và giải thuật, Đỗ Xuân Lôi, NXB Đại học Quốc gia Hà Nội 28 .. .Chương 3: Cây 3.1 Các khái niệm 3.2 Cây nhị phân 3.2.1 Định nghĩa tính chất 3.2.2 Biểu diễn nhị phân 3.2.3 Duyệt nhị phân 3.1 CÁC KHÁI NIỆM CƠ BẢN  Khái niệm cây: – Cây gồm tập hợp... sách hữu hạn 3.2 CÂY NHỊ PHÂN 3.2.1 Định nghĩa tính chất 3.2.2 Biểu diễn nhị phân 3.2.3 Duyệt nhị phân 3.2.1 ĐỊNH NGHĨA VÀ TÍNH CHẤT  Cây nhị phân bậc 2, nút có nhiều hai  Cây nhị phân có xét... struct node *left, *right; } NODE; 17 BIỂU DIỄN CÂY NHỊ PHÂN BẰNG MÓC NỐI CÁC NÚT  Cây trỏ trỏ đến nút gốc Kiểu Ref kiểu trỏ đến nút; 18 BIỂU DIỄN CÂY NHỊ PHÂN BẰNG MÓC NỐI CÁC NÚT  Phép toán

Ngày đăng: 12/12/2013, 19:15

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan