Cu trúc cây (Tree)
C
Cu tr
u trú
úc cây (Tree)
c cây (Tree)
Chương 6
Cây nhiề u nhánh
4
Các khái niệ m cơ bả n
1
Cây nhị phân tìm kiế m
2
Cây nhị phân cân bằ ng
3
N
Ni dung
i dung
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
dụ : bài toán đư a thư
mộ t bứ c thư cầ n chuyể n đế n đị a chỉ
“Nguyễ n Văn A, 10 Huỳnh Văn Nghệ , Biên hoà, Đồ ng
Nai, Việ t nam”
Trên thế giớ i hiệ n có khoả ng 8 tỷ ngư i
Làm thế nào để m ra ngư i A nhanh nhấ t?
Dùng cấ u trúc mả ng ??
Dùng danh sách liên kế t ??
C
Cá
ác kh
c khá
ái ni
i nim cơ b
m cơ bn
n
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
C
Cá
ác kh
c khá
ái ni
i nim cơ b
m cơ bn
n
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
dụ : cây thư mụ c windows
C
Cá
ác kh
c khá
ái ni
i nim cơ b
m cơ bn
n
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
dụ : cây biể u thứ c (a+b)/(c-d)
C
Cá
ác kh
c khá
ái ni
i nim cơ b
m cơ bn
n
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
dụ : cây quyế t đ nh
C
Cá
ác kh
c khá
ái ni
i nim cơ b
m cơ bn
n
Nhit đ
Đau đu
Bình thư ng Cao Rt cao
Đau đu
không
không không
{e2} không
{e5}
{e3}
không
{e6}
{e1, e4} {e2, e5} {e3,e6}
Đau đầ u Nhiệ t độ Cúm
e1 Bình thư ng Không
e2 Cao
e3 Rấ t cao
e4 Không Bình thư ng Không
e5 Không Cao Không
e6 Không Rấ t cao Không
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
Đị nh nghĩa
Mộ t cây <T> (Tree) là:
Mộ t tậ p các phầ n tử , gọ i là các nút (Node):
p1,p2,…,pN
Nế u N=0, cây <T> gọ i là cây r ng (NULL)
Nế u N>0:
Tồ n tạ i duy nhấ t 1 nút pk gọ i là gố c củ a cây
Các nút còn lạ i đư c chia thành m tậ p không giao nhau: T1,
T2, …, Tm
Mỗ i <Ti> là 1 cây con củ a cây <T>
C
Cá
ác kh
c khá
ái ni
i nim cơ b
m cơ bn
n
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
dụ : cây nhiề u nhánh
C
Cá
ác kh
c khá
ái ni
i nim cơ b
m cơ bn
n
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
Nút (Node): là 1 phầ n tử trong cây. Mỗ i nút có
thể chứ a 1 dữ liệ u bấ t kỳ
Nhánh (Branch): là đoạ n nố i giữ a 2 nút
Nút cha (Parent node)
Nút con (Child node)
Nút anh em (Sibling nodes): là nh ng nút có
cùng nút cha
C
Cá
ác kh
c khá
ái ni
i nim cơ b
m cơ bn
n
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
Bậ c củ a 1 nút pi: là số nút con củ a pi
dụ trên : Bậ c (a) = 4; Bậ c (j) = 3; Bậ c (g) = 2;
Bậ c (k) = 1; Bậ c (c) = 0
Nút gố c (Root node): nút không có nút cha
Nút lá (Leaf node, hay nút ngoài External
node): là nút có bậ c = 0 (không có nút con)
Nút nộ i (Internal node): là nút có nút cha và
nút con
Cây con (Subtree)
C
Cá
ác kh
c khá
ái ni
i nim cơ b
m cơ bn
n
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
Bậ c củ a cây: bậ c lớ n nhấ t củ a các nút trong
cây
Bậ c (<T>) = max {bậ c (pi) / pi Î <T>}
Bậ c củ a cây <T> ?
Đư ng đi (Path) giữ a nút pi đế n nút pj: là dãy
các nút liên tiế p từ pi đế n pj sao cho gi a hai nút
kề nhau đề u có nhánh
Path(a, d) ?
C
Cá
ác kh
c khá
ái ni
i nim cơ b
m cơ bn
n
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
Mứ c (Level):
Mứ c (p) = 0 nế u p = root
Mứ c (p) = 1 + M c (Cha (p)) nế u p!=root
Chiề u cao củ a cây (Height - hT): đư ng đi dài
nhấ t từ nút gố c đế n nút lá
hT = max {Path(root, pi) / pi là nút lá Î <T>}
C
Cá
ác kh
c khá
ái ni
i nim cơ b
m cơ bn
n
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
C
Cá
ác kh
c khá
ái ni
i nim cơ b
m cơ bn
n
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
C
Cá
ác kh
c khá
ái ni
i nim cơ b
m cơ bn
n
Cây đầ y đủ (Full tree): là 1 cây thoả
Tấ t cả các nút lá đề u nằ m trên cùng 1 mứ c
Tấ t cả nhữ ng nút khác có cùng bậ c vớ i cây
Mứ c h củ a cây đầ y đủ bậ c d có dh nút
VD. mứ c h=2 củ a cây bậ c 3 có bao nhiêu nút ?
h mứ c đầ u tiên củ a cây đầ y đủ bậ c d có số nút là:
1 + d + d2+ d3+ + dh-1 = (dh- 1)/(d 1)
3 mứ c đầ u tiên củ a cây đầ y đủ bậ c 3 có bao nhiêu nút ?
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
C
Cá
ác kh
c khá
ái ni
i nim cơ b
m cơ bn
n
Cây hoàn chỉ nh (Complete tree) vớ i h mứ c:
1 cây thoả các điề u kiệ n
Nhữ ng nút từ mứ c 0 đế n mứ c h-1 đề u đầ y đủ
Nhữ ng nút mứ c h đư c thêm vào cây từ
trái sang phả i
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
Cây nh
Cây nhphân
phân
Cây nhị phân là cây có bậ c = 2
Độ cao củ a cây nhị phân có N nút:
hT(max) = N
hT(min) = [logN] + 1
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
Cây nh
Cây nhphân
phân
Cấ u trúc lư u trữ dùng mả ng
Đị nh nghĩa các cấ u trúc dữ liệ u
typedef struct NODE
{
int Data;
int Left; // chỉ số nút con trái
int Right; // chỉ số nút con phả i
} NODETYPE; // cấ u trúc 1 node
// cây nhị phân có N nút
NODETYPE tree[N];
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
Cây nh
Cây nhphân
phân
Cấ u trúc lư u trữ dùng con trỏ
Đị nh nghĩa các cấ u trúc dữ liệ u
typedef struct NODE
{ int Data;
NODE *pLeft; // con trỏ đế n nút con trái
NODE *pRight; // con trỏ đế n nút con phả i
} NODETYPE; // binary tree node
typedef struct BIN_TREE
{ int Count; // Số nút trong cây
NODETYPE *pRoot; // con trỏ đế n nút gố c
}; // binary tree
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
Cây nh
Cây nhphân
phân
Cấ u trúc lư u trữ dùng con trỏ
3/11/2010 www.lhu.edu.vn
Chư ơ ng
Chư ơ ng 6 C
6 Cu tr
u trú
úc cây
c cây
Cây nh
Cây nhphân
phân
3 cách duyệ t cây:
Duyệ t gố c trư c (Pre-Order) NLR
Duyệ t gố c giữ a (In-Order) LNR
Duyệ t gố c sau (Post-Order) LRN