Tải bản đầy đủ (.pdf) (24 trang)

CẤU TRÚC DỮ LIỆUCẤU TRÚC DỮ LIỆU VÀ GIẢITHUẬT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.28 MB, 24 trang )

CẤU TRÚC DỮ LIỆU
VÀ GIẢI THUẬT
Lý thuyết


Phần 3 ((Chương
g 4))
Cây
„
„
„

Khái niệm
Một số ứng dụng
set và map

Vũ Anh Dũng - Khoa CNTT

2


Khái niệm
„

Định nghĩa
„
„
„
„

Cây là tập các nút


Tập này có thể rỗng
Bao gồm 1 nút đặc biệt,
biệt được gọi là gốc r
Một tập rỗng hoặc khác rỗng các cây con T1,
T2,…,T
Tk mà có gốc được nối trực tiếp với gốc r.
r

Vũ Anh Dũng - Khoa CNTT

3


Khái niệm
„

Gốc của mỗi cây con được gọi là con của r,
và r được gọi là cha của các nút gốc của các
cây con.

Cây tổng quát

Vũ Anh Dũng - Khoa CNTT

4


Khái niệm
„


Mỗi nút, loại trừ nút gốc đều chỉ có 1 nút
cha

Cây
y
Vũ Anh Dũng - Khoa CNTT

5


Khái niệm
„
„

Nút lá(leaf) là nút không có con, ví dụ : P,Q
Các nút có cùng nút cha được gọi là các nút
anh-chị-em (sibling), ví dụ : K,L,M

Vũ Anh Dũng - Khoa CNTT

6


Khái niệm
„

„

„


Một đường đi từ nút n1 đến nk được định
nghĩa là một chuỗi các nút n1, n2, n3, .. ,nk
trong đó nút ni là cha của nút ni+1 với 1≤iChiều dài của đường đi là số lượng cạnh
trên đó, đường đi từ n1 đến nk có chiều dài
là k-1
Trên một cây chỉ có một đường đi duy nhất
từ gốc
ố đến
đế mỗi
ỗi nút
út còn
ò lại
l i
Vũ Anh Dũng - Khoa CNTT

7


Khái niệm
„

„
„

„
„

Chiều sâu của nút là chiều dài đường đi từ
nút gốc đến nó

Chiều sâu của nút gốc là 0
Chiề cao của
Chiều
ủ một
ột nút
út ni là chiều
hiề dài
đường đi dài nhất từ ni đến một nút lá
Do đó tất
ấ cả các nút lá có chiều
ề cao bằng
ằ 0
Chiều cao của cây
y là chiều cao của nút g
gốc
Vũ Anh Dũng - Khoa CNTT

8


Khái niệm
„

Ví dụ
„
„
„

Nút E có chiều sâu 1 và chiều cao 2
Chiều cao của cây là 3

Chiều sâu của cây là độ sâu nhất của nút lá.

Chiều sâu của cây bằng chiều cao của cây

Vũ Anh Dũng - Khoa CNTT

9


Cài đặt cây
1 struct TreeNode
2 {
3
Obj
Object
t element;
l
t
4
TreeNode *firstChild;
5
TreeNode *nextSibling;
6 };

ƒMũii tên chỉ
h xuống
ố minh
i h
họa firstChild
ƒMũi tên nằm ngang

g g
chiều hướng từ trái sang
phải mô tả nextSibling
ƒCác liên kết rỗng (null)
không được vẽ vì số
lượng của chúng rất nhiều

Vũ Anh Dũng - Khoa CNTT

10


Duyệt cây
„

Ví dụ về duyệt cây thư mục
„

Dấu * bên cạnh tên chỉ ra rằng đó là thư mục

Vũ Anh Dũng - Khoa CNTT

11


Duyệt cây
„

„


Giả sử chúng ta muốn đưa ra danh sách tên
của tất cả các file trong một thư mục
Cách đưa ra của chúng ta là với các file nằm
ở độ sâu thì khi đưa ra ta sẽ đưa ra tên của
file đó dịch vào khoảng trống (tab)

Vũ Anh Dũng - Khoa CNTT

12


Duyệt cây
void FileSystem::listAll ( int depth = 0 ) const
{
1 p
printName(
t a e( dept
depth ); // Print
t t
the
e name
a e o
of t
the
e
object
2 if ( isDirectory( ) )
3 for each file c in this directory (for each
child)
4 c.listAll ( depth + 1 );

}

Vũ Anh Dũng - Khoa CNTT

13


Duyệt cây
int FileSystem::size( ) const
{
int totalSize = sizeOfThisFile( );
if ( isDirectory( ) )
for each file c in this directory
totalSize += c.size( );
return totalSize;
}

Vũ Anh Dũng - Khoa CNTT

14


Cây nhị phân
„

Cây nhị phân là cây mà mỗi nút có không
quá 2 con,
con hai cây con này có thể rỗng

Vũ Anh Dũng - Khoa CNTT


15


Cài đặt cây nhị phân
struct BinaryNode
{
Object element; // The data in the
node
Binar Node * left
BinaryNode
left;
// Left child
BinaryNode * right; // Right child
};

Cấu trúc 1 nút trên cây nhị phân
Vũ Anh Dũng - Khoa CNTT

16


Cây nhị phân biểu thức
„

„

Nút lá của cây là các toán hạng, như là
hằng số hoặc các biến
Các nút khác là các toán tử


(a + (b * c)) + (((d * e) + f) * g)
Vũ Anh Dũng - Khoa CNTT

17


Duyệt cây nhị phân biểu thức
„

„

„

Duyệt theo thứ tự trước : toán tử, con trái,
con phải.
phải Ví dụ : ++a
++a*bc*+*defg
bc + defg
Duyệt theo thứ tự giữa : con trái, toán tử,
con phải.
phải
Duyệt theo thứ tự sau : con trái, con phải,
t á tử.
toán
tử Ví dụ
d : abc*+de*f+g*+
b *+d *f+ *+

Vũ Anh Dũng - Khoa CNTT


18


Xây dựng
cây nhị phân biểu thức
Thuật toán chuyển đổi thành cây biểu thức
từ một biểu thức dạng hậu tố
„ Ví dụ giả sử đầu vào là ab+cde+**
„ Hai
H i ký tự
t đầu
đầ tiên
tiê là các
á
toán hạng, vì thế chúng ta
tạo hai nút và đNy con trỏ
của hai nút này vào ngăn xếp
„

Vũ Anh Dũng - Khoa CNTT

19


Xây dựng
cây nhị phân biểu thức
„

Tiếp đến chúng ta đọc được một toán tử, vì

thế hai con trỏ trong ngăn xếp được lấy ra,
ra
một cây mới được tạo và con trỏ tới nó
được đNy vào ngăn xếp

Vũ Anh Dũng - Khoa CNTT

20


Xây dựng
cây nhị phân biểu thức
„

Tiếp theo c d e được đọc và ứng với mỗi
toán hạng ta tạo mội nút cây và đNy con trỏ
tương ứng của nó vào ngăn xếp

Vũ Anh Dũng - Khoa CNTT

21


Xây dựng
cây nhị phân biểu thức
„

Tiếp theo dấu + được đọc, vì thế hai cây
được kết hợp


Vũ Anh Dũng - Khoa CNTT

22


Xây dựng
cây nhị phân biểu thức
„

Tiếp theo * được đọc, ta lấy ra hai con trỏ
của hai cây trong ngăn xếp và tạo một cây
mới với * là gốc

Vũ Anh Dũng - Khoa CNTT

23


Xây dựng
cây nhị phân biểu thức
„

Cuối cùng, ký hiệu cuối cùng được đọc, hai
cây được kết hợp và một con trỏ tới cây kết
quả còn lại trong ngăn xếp

Vũ Anh Dũng - Khoa CNTT

24




×