Bài giảng Cấu trúc dữ liệu: Chương 3 - TS. Trần Cao Đệ
lượt xem 5
download
Bài giảng Cấu trúc dữ liệu: Chương 3 - Cấu trúc cây Trees nhằm giúp học viên hiểu rõ các khái niệm cơ bản cảu cấu trúc dữ liệu theo kiểu cấu trúc cây, các quan hệ trong cấu trúc cây, các nút trong quan hệ cây, các đường đi và các nội dung khác.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Cấu trúc dữ liệu: Chương 3 - TS. Trần Cao Đệ
- Chương 3: Cấu trúc cây Trees TS. Trần Cao Đệ Năm 2010 1
- Thuật ngữ cơ bản Cây: là một tập hợp các phần tử gọi là nút (nodes): Có một nút được phân biệt gọi là nút gốc (root). Quan hệ cha - con (parenthood): xác định hệ thống cấu trúc phân cấp trên các nút. Mỗi nút, trừ nút gốc, có duy nhất một nút cha. Một nút có thể có nhiều nút con hoặc không có nút con nào. Mỗi nút biểu diễn một phần tử trong tập hợp đang xét và nó có thể có một kiểu nào đó bất kỳ. Biểu diễn nút bằng một kí tự, một chuỗi hoặc một số ghi trong vòng tròn. Mối quan hệ cha con được biểu diễn theo qui ước nút cha ở dòng trên nút con ở dòng dưới và được nối bởi một đoạn thẳng. 2
- Ví dụ một cây 1 2 3 4 5 6 7 9 10 8 3
- Định nghĩa n Một nút đơn độc là một cây. Nút này cũng chính là nút gốc của cây. n1 n2 nk Giả sử ta có n là một nút đơn độc và k cây T1,.., Tk với các nút gốc tương ứng là n1,.., nk thì T1 T2 Tk có thể xây dựng một cây mới bằng cách cho nút n là cha của các nút n1,.., nk. Cây mới này có nút gốc là nút n và các cây T1,.., Tk được gọi là các cây con. Tập rỗng cũng được coi là một cây và gọi là cây rỗng kí hiệu ∅. 4
- Thuật ngữ Đường đi: chuỗi các nút n1,.., nk, trong đó ni là nút cha của nút ni+1, với i=1..k-1 1 Độ dài đường đi = số nút – 1 Đường đi từ một nút đến chính nó có độ dài bằng không. 2 3 4 Nếu có đường đi từ nút a đến nút b thì ta nói a là tiền bối (ancestor) của b, còn b gọi là hậu duệ 5 6 7 9 10 (descendant) của nút a. một nút vừa là tiền bối vừa là hậu duệ của chính nó. Tiền bối hoặc hậu duệ của một 8 nút khác với chính nó gọi là tiền bối hoặc hậu duệ thực sự. Nút gốc không có tiền bối thực sự. 5
- Nút không có hậu duệ thực sự 1 gọi là nút lá (leaf). Nút không phải là lá ta còn gọi là nút trung gian (interior). 2 3 4 Cây con của một cây là một nút cùng với tất cả các hậu duệ của nó. 5 6 7 9 10 Chiều cao của một nút là độ dài đường đi lớn nhất từ nút đó tới lá. 8 Chiều cao của cây là chiều cao của nút gốc. Độ sâu của một nút là độ dài đường đi từ nút gốc đến nút đó. Các nút có cùng một độ sâu i ta gọi là các nút có cùng một mức i. 6
- Thứ tự nút A Nếu ta phân biệt thứ tự các nút con của cùng một nút thì cây gọi là cây có thứ tự Thứ tự qui ước từ trái sang B C phải. Nếu không phân biệt rõ ràng thứ tự các nút thì ta gọi là cây không có thứ tự. A Các nút con cùng một nút cha gọi là các nút anh em ruột (siblings). Quan hệ "trái sang phải" của C B các anh em ruột có thể mở rộng cho hai nút bất kỳ. 7
- Duyệt cây Duyệt cây là một qui tắc cho phép đi qua lần lượt tất cả các nút của cây mỗi nút đúng một lần Danh sách liệt kê các nút (tên nút/ giá trị) theo thứ tự đi qua gọi là danh sách duyệt cây. Ba cách duyệt cây quan trọng: duyệt tiền tự (preorder), duyệt trung tự (inorder), duyệt hậu tự (posorder). 8
- Cây rỗng: T n tiền tự, trung tự, hậu tự = RỖNG. n1 n2 nk Cây chỉ có một nút n: tiền tự, trung tự, hậu tự của T1 T2 Tk cây= n. T gốc n, các cây con T1,…, Tk: Tiền tự(T) = n, tiền tự (T1), …, tiền tự (Tk) Trung tự(T) = Trung tự(T1), n, trung tự (T2), …, trung tự (Tk) Hậu tự (T) = hậu tự (T1), …, hậu tự (Tk), n 9
- Ví dụ duyệt cây 1 Tiền tự 1, 2, 5, 6, 3, 7, 8, 9, 10, 2 3 4 4 5 6 Trung tự 7 9 10 5, 2, 6, 1, 8, 7, 3, 9, 10, 4 8 Hậu tự 5, 6, 2, 8, 7, 9, 10, 3, 4, 1 10
- Bài tập A B H C D K L E F Duyệt Tiền tự, trung tự, hậu tự cây tiền tự: A B C D E F H K L trung tự: C B E D F A K H L hậu tự: C E F D B K L H A 11
- Cây có nhãn và cây biểu thức Ta thường lưu trữ kết hợp một n1 * nhãn (label) hoặc còn gọi là một giá trị (value) với một nút của + n2 _ n3 cây. Như vậy nhãn của một nút không phải là tên nút mà là giá trị được lưu giữ tại nút đó. n4 n5 n6 n7 a b a c Biểu thức: (a+b)*(a-c) Qui tắc biểu diễn biểu thức toán θ học E1 θ E2 E1 E2 12
- + + a+b b a a b - a-b a b - * a*c - b * b a - a c c b 13
- cây biểu thức - Khi duyệt một cây biểu diễn một biểu thức toán học và liệt kê nhãn của các nút theo thứ tự * b duyệt thì ta có: Biểu thức dạng tiền tố hay biểu thức tiền tố (prefix) tương ứng với phép duyệt tiền tự của cây. a c Biểu thức dạng trung tố hay biểu thức trung tố (infix) tương ứng với phép duyệt trung tự của cây. Biểu thức tiền tố - * a c b Biểu thức dạng hậu tố hay biểu thức hậu tố (posfix) tương ứng Biểu thức trung tố a * c – b với phép duyệt hậu tự của cây. Biểu thức hậu tố a c * b - 14
- KIỂU DỮ LIỆU TRỪU TƯỢNG CÂY Hàm PARENT(n,T) cho nút cha của nút n trên cây T Hàm LEFTMOST_CHILD(n,T) cho nút con trái nhất của nút n trên cây T, nếu n là lá thì hàm cho giá trị NULL. Hàm RIGHT_SIBLING(n,T) cho nút anh em ruột phải nút n trên cây T, nếu n không có anh em ruột phải thì hàm cho giá trị NULL. Hàm LABEL_NODE(n,T) cho nhãn tại nút n của cây T. Hàm ROOT(T) trả ra nút gốc của cây T. Nếu Cây T rỗng thì hàm trả về NULL. Hàm CREATEi(v,T1,T2,..,Ti),với i=0..n, thủ tục tạo cây mới có nút gốc là n được gán nhãn v và có i cây con T1,..,Ti. Nếu n= 0 thì thủ tục tạo cây mới chỉ gồm có 1 nút đơn độc là n có nhãn v. Hàm EMPTY_TREE(T) trả về true nếu cây rỗng, ngược lại nó trả về false. 15
- Cài đặt cây bằng mảng gán tên cho các nút lần lượt là 0,1, MaxNode giữ số nút hiện tại đang 2, .., n-1. có trên cây. Dùng một mảng một chiều A để lưu trữ cây: Hàm PARENT(n,T) tốn chỉ một A[i] = j với j là nút cha của nút i. hằng thời gian Nếu i là nút gốc ta cho a[i] = Null Hàm đòi hỏi thông tin về các con Nếu cây T là cây có nhãn: không làm việc tốt Dùng thêm một mảng một chiều qui ước việc đặt tên cho các nút thứ hai L chứa các nhãn: cho L[i] (đánh số thứ tự) như sau: = x với x là nhãn Đánh số theo thứ tự tăng dần bắt Hoặc khai báo mảng a là mảng đầu tại nút gốc. của các struct có hai trường: Nút cha được đánh số trước các trường Parent giữ chỉ số nút cha; nút con. trường Data giữ nhãn của nút Các nút con cùng một nút cha được đánh số lần lượt từ trái sang phải 16
- 1 2 3 4 5 6 7 9 10 8 Maxlength Chỉ 1 2 3 4 5 6 7 8 9 10 số Pare -1 1 1 1 2 2 3 7 3 3 nt data Maxnode 17
- Ví dụ khác A 0 2 1 B C 3 4 8 9 D E I J F G H 5 6 7 18
- Khai báo cấu trúc dữ liệu #define MAXLENGTH ... /* chỉ số tối đa của mảng */ #define NULL -1 typedef ... DataType; typedef int Node; typedef struct { /* Lưu trữ nhãn (dữ liệu) của nút trong cây */ DataType Data[MAXLENGTH]; /* Lưu trữ cha của các nút trong cây theo nguyên tắc: Cha của nút i sẽ lưu ở vị trí i trong mảng */ Node Parent[MAXLENGTH]; /* Số nút thực sự trong cây */ int MaxNode; } Tree; Tree T; 19
- Khởi tạo cây rỗng void MAKENULL_TREE (Tree& T){ T.MaxNode=0; } Kiểm tra cây rỗng int EMPTY_TREE(Tree T){ return T.MaxNode == 0; } Xác định nút cha của nút trên cây Node PARENT(Node n,Tree T){ if (EMPTY_TREE(T) || (n>T.MaxNode-1)) return NULL; else return T.Parent[n]; } 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu & thuật toán: Chương 3 - Nguyễn Đức Nghĩa
0 p | 491 | 166
-
Bài giảng Cấu trúc dữ liệu cơ bản và giải thuật - Chương 1
9 p | 258 | 29
-
Bài giảng Cấu trúc dữ liệu - Bài 1:Tổng quan về cấu trúc dữ liệu và giải thuật
47 p | 178 | 17
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 3 - Đỗ Bích Diệp
28 p | 119 | 10
-
Bài giảng Cấu trúc dữ liệu: Chương 10 - Nguyễn Xuân Vinh
31 p | 95 | 10
-
Bài giảng Cấu trúc dữ liệu 1: Chương 1 - Lương Trần Hy Hiến
7 p | 162 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 8: Cấu trúc dữ liệu ngăn xếp
28 p | 81 | 9
-
Bài giảng Cấu trúc dữ liệu giải thuật: Các kiểu dữ liệu trừu tượng cơ bản - Cấu trúc dữ liệu tuyến tính
92 p | 117 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây đỏ đen - Bùi Tiến Lên
25 p | 88 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 17: Cấu trúc dữ liệu dạng cây
21 p | 77 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các cấu trúc dữ liệu
193 p | 62 | 7
-
Bài giảng Cấu trúc dữ liệu: Chương Giới thiệu - Nguyễn Xuân Vinh
8 p | 112 | 7
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (2016)
62 p | 94 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (Trường Đại học Hồng Bàng )
62 p | 173 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 – Trần Minh Thái (2017)
67 p | 107 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Chương 1: Tổng quan về giải thuật và cấu trúc dữ liệu
10 p | 70 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các khái niệm cơ bản
23 p | 48 | 3
-
Bài giảng Cấu trúc dữ liệu giải thuật: Cấu trúc dữ liệu
17 p | 53 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn