❖Cấu trúc thư mục trên đĩa máy tính ❖Sơ đồ nhân sự của tổ chức

Một phần của tài liệu Cấu trúc dữ liệu và giải thuật (Trang 42 - 47)

V: Tập hữu hạn các phầntử (nút) E: Tập hữu hạn(cung) thể hiện mố

❖Cấu trúc thư mục trên đĩa máy tính ❖Sơ đồ nhân sự của tổ chức

❖Sơ đồ nhân sự của tổ chức

❖Cây phả hệ

❖Dùng cây để biểu diễn biểu thức số học, chẳng hạn: ( a+b) x (c-d/e) hạn: ( a+b) x (c-d/e) 3.1.1 Định nghĩa x + - c / e d b a

Chương 3. Cây 85

3.1.2 Các khái niệm cơ bản về cây

❖Số các con của một nút gọi là cấp/bậc (degree) của nút

đó

▪ Nút có bậc bằng 0 gọi là nút lá (leaf)

▪ Các nút không phải nút lá gọi là nút nhánh ( branch)

▪ Bậc cao nhất có trong các nút của một cây gọi là bậc của cây đó.

❖Mức-Level: Gốc của cây có mức 1, nếu một nút có mức i

thì các nút con của nút đó có mức i+1.

▪ Chiều cao (height) của cây là số mức lớn nhất của các nút có trên cây đó

3.1.2 Các khái niệm cơ bản về cây

❖Cây có thứ tự: là cây mà có xét đến thứ tự giữa các con

của một nút

▪ Con trưởng/con cực trái của một nút: là con thứ nhất trong quan hệ thứ tự giữa các nút cùng cha

▪ Em liền kề của một nút: là nút đứng ngay sau trong quan hệ thứ tự giữa các nút cùng cha

❖Cây có nhãn: mỗi nút của cây được gán một nhãn. Nhãn

có thể là kiểu số nguyên, kiểu ký tự hay một kiểu dữ liệu khác khác tạp hơn

❖Rừng:Tập hợp hữu hạn các cây phân biệt gọi là một rừng

Chương 3. Cây 87

3.1.2 Các khái niệm cơ bản về cây

12 2 3 4 A C B D G H I K J F E

3.2 Một số phép toán trên cây

❖Khởi tạo cây rỗng: void Initialize(TypeTree T); ❖Xác định nút gốc: Ref Root(TypeTree T); ❖Xác định nút cha của một nút:

Ref Parent(TypeTree T, TypeNode V);

❖Tìm con trưởng của một nút

Ref EldestChild(TypeTree T, TypeNode V);

❖Xác định em liền kề của một nút:

Ref NextSibling(TypeTree T,TypeNode V);

❖Duyệt cây: truy cập mọi nút để thực hiện một xử lý nào

đó →khơng sót, khơng lặp: Void Traverse(TypeTree T);

Chương 3. Cây 89

3.3 Cài đặt cây

3.3.1 Cài đặt cây bởi mảng

3.3.2 Cài đặt cây bởi danh sách các con3.3.3 Cài đặt cây bằng con trỏ 3.3.3 Cài đặt cây bằng con trỏ

3.3.4 Ứng dụng

3.3.1 Cài đặt cây bởi mảng

Quy ước:

❖Cho cây T cónnút

❖Gán tên cho các nút lần lượt là 0, 1, 2, ..,n-1.

❖Dùng một mảng một chiềua để lưu trữ cây bằng cách choa[i] = j

vớij là nút cha của nút i. Nếu i là nút gốc ta cho a[i] = -1 vì nút

gốc khơng có cha

❖Nếu cây T là cây có nhãn, ta có thể dùng thêm một mảng một chiều L chứa các nhãn của cây bằng cách cho L[i] = x với x là nhãn của nút i, hoặc khai báoa là một struct có ba trường: trường Parent là một mảng giữ chỉ số nút cha; trường Data là một mảng giữ nhãn của nút và một trường MaxNode giữ số nút hiện tại đang có trên cây

Chương 3. Cây 91

3.3.1 Cài đặt cây bởi mảng

❖Nhận xét

▪ Hàm PARENT(n,T) tốn chỉ một hằng thời gian

▪ Các hàm địi hỏi thơng tin về các con khơng làm việc tốt (vì phải tốn vịng lặp để dị tìm), vd: tìm nút con trái nhất của nútilà khơng thể xác định được.

❖Khắc phục bằng qui ước:

▪ Đánh số theo thứ tự tăng dần bắt đầu tại nút gốc. ▪ Nút cha được đánh số trước các nút con.

▪ 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

→Cách lưu trữ này chỉ phù hợp với cây mà các nút của cây khác nhau từng đơi một

3.3.1 Cài đặt cây bởi mảng

❖Ví dụ A D B J C I F G H E 0 9 8 7 3 4 5 6 2 1 A B C D E I J F G H -1 0 0 1 1 2 2 4 4 4 … 0 1 2 3 4 5 6 7 8 9 …

Nhãn của các nút trên cây Cha của nút trên cây Chỉ số của mảng

Chương 3. Cây 93

3.3.1 Cài đặt cây bởi mảng

Khai báo cấu trúc dữ liệu

#define MAXSIZE ... /* chỉ số tối đa của mảng */ typedef ... DataType;

typedef int Node; typedef struct {

DataType Data[MAXSIZE];/* Nhãn của nút trong cây */ Node Parent[MAXSIZE]; /* Cha của các nút trong cây */ int MaxNode; /* Số nút thực sự trong cây */

} Tree;

3.3.1 Cài đặt cây bởi mảng

Một phần của tài liệu Cấu trúc dữ liệu và giải thuật (Trang 42 - 47)

Tải bản đầy đủ (PDF)

(94 trang)