1. Trang chủ
  2. » Giáo án - Bài giảng

Cây Nhị Phân

31 324 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 31
Dung lượng 375 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

ĐỊNH NGHĨACây nhị phân là cây có các nút đã được khoá hóa và được sắp xếp theo một thứ tự phản ánh vị trí của nút ở trong cây.. Với mỗi một nút:+ Toàn bộ những nút ở cây con bên trái của

Trang 2

Néi dung chÝnh cña bµi

I §Þnh nghÜa c©y nhÞ ph©n

II BiÓu diÔn c©y nhÞ ph©n

III C¸c phÐp to¸n duyÖt c©y nhÞ ph©n

iV Mét sè thao t¸c trªn c©y nhÞ ph©n Bµi tËp

Trang 3

I ĐỊNH NGHĨA

Cây nhị phân là cây có các nút đã được khoá hóa và được sắp xếp theo một thứ tự phản ánh vị trí của nút ở trong cây.

Đặc điểm của cây nhị phân:

Mọi nút trên cây chỉ có tối đa 2 con.

Với mỗi một nút:+ Toàn bộ những nút ở cây con bên trái của nó đều có khoá nhỏ hơn khoá của nó.

+ Toàn bộ những nút ở cây con bên phải của nó đều có khoá lớn hơn khoá của nó.

Trang 4

Ví dụ:

Đây là cây nhị phân với toán tử ứng với gốc, toán hạng 1 ứng với cây con trái, toán hạng 2 ứng với cây con phải

Trang 5

Một số dạng đặc biệt của cây nhị phân

A B

C D

b A

C B

E

d

c c, d) Cây nhị phân

Cây zic- zắc

Trang 6

Một số dạng đặc biệt của cây nhị phân (tiếp)

Cây nhị phân gần đầy

A

C

G H

B E J

D

F Cây nhị phân đầy đủ

Trang 7

II BIỂU DIỄN CÂY NHỊ PHÂN

1 Lưu trữ kế tiếp

Cây nhị phân đầy đủ:

- Đánh số cho các nút trên cây theo thứ tự lần lượt từ mức 1 trở lên, hết mức này đến mức khác, từ trái sang phải đối với mỗi mức

Ví dụ: Đánh số cây ở hình dưới như sau:

Trang 8

1 Lưu trữ kế tiếp (tiếp).

Vậy với cây trên ta sẽ có

A B C D E F G V[1] V[2] V[3] V[4] V[5] V[6] V[7]

Trang 9

1 Lưu trữ kế tiếp (tiếp).

Nhận xét:

- Với cây nhị phân hoàn chỉnh mà các nút ở mức cuối đều dạt về phía trái thì cách lưu trữ này vẫn phù hợp

-Các cây nhị phân khác thì cách lưu trữ này gây lãng phí do có nhiều phần tử bị bỏ trống

-Do cây luôn biến động ( thêm, bớt các nút) nên cách lưu trữ này rất khó khăn cho các thao tác đó

Trang 10

2 Lưu trữ móc nối

Mỗi nút gồm:

Trong đó:

Left: Ứng với con trỏ, trỏ tới cây

con trái của nút đó

Right:Ứng với con trỏ, trỏ tới cây

con phải của nút đó

Infor: Thông tin của nút.

Key: Khoá của nút.

Left Infor Key Right

Item

Trang 11

D

C

F E

H I G

T

Trang 12

Khai báo cây (Dùng danh sách móc nối)

Left,Right: Search_Type;

End;

Trang 13

III CÁC PHÉP DUYỆT CÂY NHỊ PHÂN

Duyệt theo thứ tự trước

(Gốc T → Cây con trái → Cây con phải)

Trang 14

Cài đặt

Procedure T_T_truoc(T:Search_type); Begin

If T= Nil then write(‘Cay rong’) Else

Begin

Duyetgoc(T^.Node); T_T_truoc(T^.Left); T_T_truoc(T^.Right); End;

End;

Trang 15

Duyệt theo thứ tự sau.

(Cây con trái → Cây con phải → Gốc T )

Cụ thể:

- Nếu cây T rỗng thì không làm gì

- Nếu cây T ≠ Nul thì:

+ Duyệt cây con trái của T (theo thứ tự sau)

+ Duyệt các cây phải của gốc T (theo thứ

tự sau)

+ Thăm gốc T

Trang 16

C ài đặt

Procedure T_T_sau(T:Search_type);Begin

If T= Nil then write(‘Cay rong’) Else

Begin

T_T_sau(T^.Left);

T_T_sau(T^.Right);Duyetgoc(T^.Node);End;

End;

Trang 17

Duyệt theo thứ tự giữa.

(Cây con trái → Gốc T → Cây con phải)

Trang 18

C ài đặt

Procedure T_T_Giua(T:Search_type); Begin

Trang 19

IV.MỘT SỐ THAO TÁC TRÊN CÂY NHỊ PHÂN

1. Trả ra một phần tử có khoá đã biết.

2. Chèn một phần tử vào cây nhị phân

3. Xoá một phần tử khỏi cây nhị phân

Trang 20

While (temp <>Nil) and (Tem^.Item.key<>k) Do

If Tem^.Item.key > k then Temp:=Temp ^.Left Else Temp:= Temp ^ Right

Phantu:= Temp;

End;

Trang 21

1 Trả ra một phần tử có khoá đã biết (tiếp)

Trang 22

2 Ch èn một phần tử vào cây nhị phân

Cách thực hiện:

- Tìm vị trí chèn.

- Thực hiện chèn Thuật toán:

-Nếu cây rỗng thì chèn vào gốc.

-Nếu khoá của phần tử mới < khoá của gốc thì chèn vào cây con trái.

-Nếu khoá của phần tử mới > khoá của gốc thì chèn vào cây con phải.

Trang 23

2 Chèn một phần tử vào cây nhị phân (tiếp)

If Tem^.Item.key = T ^.Item.key then Insert(newItem,T ^.right) Else Insert(NewItem ^.Right);

End;

Trang 24

3 Xoá một phần tử khỏi cây nhị phân

Trang 25

3 Xoá một phần tử khỏi cây nhị phân (tiếp)

làm như sau

(1) Cho nút cha chỉ vào Nil

(2) Cho nút cha của nút cần xoá chỉ vào nút con của nút cần xoá.

(3) + Tìm phần tử lớn nhất của cây con bên trái của nút đó hoặc phần tử nhỏ nhất của cây con bên phải.

+ Thay phần tử cần xoá bằng phần tử vừa tìm thấy.

+ Xoá phần tử đó ra khỏi cây

Trang 26

3 Xoá một phần tử khỏi cây nhị phân (tiếp)

Mã hoá

Procedure Delete(k:key_Type; Var T: search_Type);

Begin

If k < T ^.Item.key then Delete(x,T ^.Left)

Else If x > T ^.Item.key then Delete(x, T ^.Right)

Else If T ^.Left=Nil then T:= T ^.Right

Else

If T ^.Right = Nil then T:= T ^.Left Else

Begin Temp:= T ^.Left;

While Temp ^.Right <> Nil Do Temp:= Temp ^.Right;

T ^.Item:=Temp ^.Item;

Delete(Temp ^.Item.key,T ^.Left);

End;

End;

Trang 27

CÂU HỎI VÀ BÀI TẬP

thức sau đây và viết chúng dưới dạng tiền

tố, hậu tố

a) (a * b + c)/(d – e * f)

b) A /(B + C) + D * E – A * C

Trang 28

Bài 2: Cho cây nhị phân

Hãy viết các nút được thăm khi duyệt cây này:

Trang 29

Bài 3: Cho cây nhị phân

Hãy minh hoạ phần bộ nhớ khi thực hiện lưu trữ kế tiếp đối với cây trên

A

C

F I

B

D H

Trang 30

Bài 4: Tìm cây nhị phân mà các nút sẽ xuất hiện theo một dãy giống nhau khi duyệt:

a Theo thứ tự trước và thứ tự giữa.

b Theo thứ tự trước và thứ tự sau.

c Theo thứ tự giữa và thứ tự sau.

Ngày đăng: 10/06/2015, 04:00

Xem thêm

TỪ KHÓA LIÊN QUAN

w