1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Cây nhị phân (binary tree) một số tính chất của cây nhị phân biểu diễn cây nhị phân biểu diễn cây tổng quát bằng cây nhị phân

54 6 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

Tiêu đề Cây Nhị Phân (binary tree) Một Số Tính Chất Của Cây Nhị Phân Biểu Diễn Cây Nhị Phân Biểu Diễn Cây Tổng Quát Bằng Cây Nhị Phân
Tác giả Trần Hữu Thanh Thiên, Huỳnh Bảo Toàn, Trần Minh Nghĩa, Nguyễn Hải Hồ
Người hướng dẫn Trần Anh Tuấn
Trường học Trường Đại Học
Chuyên ngành Cấu Trúc Dữ Liệu & Giải Thuật
Thể loại tiểu luận
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 54
Dung lượng 1,71 MB

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

Nội dung

GIỚI THIỆU THÀNH VIÊN- Chuẩn bị nội dung: Một số tính chất của cây nhị phân - Thuyết trình phần: Một số tính chất của cây nhị phân - Chuẩn bị nội dung: Biểu diễn cây nhị phân - Thuyết tr

Trang 1

SLIDE POWERPOINT Nhóm: 14

Môn: CTDL & GT Giảng Viên: Trần Anh Tuấn

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 2

GIỚI THIỆU THÀNH VIÊN

- Chuẩn bị nội dung: Một số tính chất của cây nhị phân

- Thuyết trình phần: Một số tính chất của cây nhị phân

- Chuẩn bị nội dung: Biểu diễn cây nhị phân

- Thuyết trình phần: Biểu diễn cây nhị phân

- Chuẩn bị nội dung: Duyệt cây nhị phân

- Thuyết trình phần: Duyệt cây nhị phân

- Chuẩn bị nội dung: Biểu diễn cây tổng quát bằng cây nhị phân

- Thuyết trình phần : Biểu diễn cây tổng quát bằng cây nhị phân

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 4

01 Khái niệm

Một số tính chất của cây nhị phân 02

03 Biểu diễn cây nhị phân

Duyệt cây nhị phân

05 Biểu diễn cây tổng quát bằng cây nhị

phân

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 5

- Cây nhị phân là tập hợp các nút (node) chứa giá trị liên kết với nhau theo quan

hệ cha - con (lần lượt theo chiều mũi tên như hình vẽ) sao cho mỗi nút không quá 2 nút con.

- Nút gốc là nút không là con của bất kỳ của nút nào, là nút bắt đầu của cây nhị phân, từ đó cây nhị phân mở rộng ra.

- Nút trong là nút có con, bất kể 1 hoặc 2 nút con.

Khái Niệm 01 - Nút lá là nút không có nút con nào.

- Không giống như Mảng, Danh sách liên kết, Ngăn xếp và hàng đợi, là cấu trúc dữ

- Mỗi nút trong cây cùng với những nút phía dưới nó tạo thành một cây con.

liệu tuyến tính, cây là cấu trúc dữ liệu phân cấp.

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 6

- Lưu trữ thông tin tạo thành một hệ thống phân cấp một cách tự nhiên

- Cung cấp khả năng truy cập, tìm kiếm vừa phải (nhanh hơn danh

sách liên kết và chậm hơn so với mảng)

hơn danh sách liên kết không có thứ tự)

- Không có giới hạn về số lượng nút vì các nút được liên kết bằng cách sử dụng con trỏ (giống danh sách liên kết và không giống mảng).

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 7

Các dạng cây nhị phân đặc biệt 02

Trang 8

Các dạng cây nhị phân suy biến

- Cây nhị phân hoàn chỉnh: Các nút ứng với các mức trừ mức gần mức cuốicùng đều có 2 con

- Cây nhị phân đầy đủ: Các nút có bậc tối đa ở mọi mức kể cả mức gần

mức cuối cùng

02

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 9

Thao táo dữ liệu phân cấp

Làm cho thông tin dễ dàng tìm kiếm

Thao tác với danh sách dữ liệu đã được sắp xếp

Là một quy trình làm việc để tổng hợp các hình ảnh kỹ thuật số cho các hiệu ứng hình ảnh

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 10

Biểu diễn cây nhị phân

Có 2 cách biểu diễn:

-Biểu diễn cây nhị phân bởi mảng -Biểu diễn cây nhị phân bằng con trỏ

Trang 11

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 12

Biểu diễn cây nhị phân bởi mảng

- Mô tả dạng biểu diễn:

• Cây sau khi biểu diễn được xem như một mảng các nút (đỉnh)

• Mỗi nút (đỉnh) là một bản ghi gồm 3 trường: info, left, right Info: lưu giá trị của đỉnh

Left: con trái của đỉnh (lưu ID)Right: con phải của đỉnh (lưu ID)

 Thực hiện các thao tác trên cây là thực hiện các thao tác trên

03 mảng này

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 14

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 16

Biểu diễn cây nhị phân con trỏ

Ngoài cách cài đặt cây nhị phân bởi mảng, chúng ta còn có thể sử dụng con trỏ để cài đặt cây nhị phân Trong cách này mỗi bản ghi biểu diễn một đỉnh của cây chứa hai con trỏ: con trỏ trái (left) trỏ tới đỉnh con trái, con trỏ phải (right) trỏ tới đỉnh con phải

03

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 18

Cú Pháp Biểu Diễn

typedef struct Node

{

item Infor;

Node *pLeft; // con trỏ đến nút con trái

Node *pRight; // con trỏ đến nút con phải

}

typedef struct Node *bTree2

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 19

03 Các phép toán cơ bản trên cây nhị phân

1- Tạo cây rỗng2- Kiểm tra cây rỗng3- Xác định con trái của một nút được trỏ bởi p4- Xác định con phải của một nút được trỏ bởi p5- Kiểm tra nút lá

6- Xác định số nút của cây

8- Tìm một đỉnh có khóa x trên cây

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 21

2- Kiểm tra cây rỗng

Để kiểm tra có phải cây rỗng hay không ta chỉ cần kiểm tra xem trên cây cónút nào không, nếu không trả về True ngược lại trả về False Ở đây ta kiểm trabiến T có bằng NULL không

Trang 22

3- Xác định con trái của một nút

Để xác định con trái của một nút bất kỳ trên cây đầu tiên ta kiểm tra xem cây córỗng hay không, nếu cây khác rỗng thì trả về nút con trái của nút cần tìm cònnếu cây rỗng thì trả về giá trị NULL

bTree2 leftChild(bTree2 T)

{

if ( T!=NULL ) return T->left;

else return NULL;

}

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 24

6- Xác định số nút của cây

Để xác định số nút của cây ta thực hiện như sau: kiểm tra cây, nếu cây rỗng thì

không có nút nào trên cây, nếu cây khác rỗng thì trả về số nút trên cây bằng 1 (nút gốc) cộng với số nút của cây con bên trái và cộng với số nút của cây con bên phải

Int numberNodes (bTree2 T)

Trang 25

7- Tạo cây mới từ hai cây có sẵn

Cho hai cây con a, b và x là giá trị bất kì Hãy tạo một cây nhị phân có gốc lưu

x và a, b là hai cây con trái, phải của gốc này

Cách giải: + Yêu cầu máy tính cấp phát bộ nhớ để làm gốc của cây

bTree2 create2(Tdata x, bTree2 a, bTree2 b)

Trang 26

8- Tìm nút có nội dung là x trên cây nhị phân

Để tìm nút có nội dung x trên cây nhị phân ta tiến hành kiểm tra từ nút gốc, nếunút gốc có nội dung là x thì nút gốc chính là nút cần tìm Nếu nút gốc bằngNULL ( cây rỗng ) thì không có nút nào có nội dung là x trên cây Nếu nộidung nút gốc khác x và nút gốc khác NULL thì ta lần lượt thực hiện phép toántìm kiếm trên nhánh cây con bên trái và cây con bên phải của cây đó

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 27

Duyệt

cây nhị

phân

Duyệt cây là gì?

Duyệt cây là một tiến trình để truy cập tất cả các nút của một cây và cũng

có thể in các giá trị của các nút này Bởi vì tất cả các nút được kết nối thông qua các cạnh (hoặc các link), nên chúng ta luôn luôn bắt đầu truy cập từ nút

04gốc Do đó, chúng ta không thể truy cập ngẫu nhiên bất kỳ nút nào trong cây

Có ba phương thức mà chúng ta có thể sử dụng để duyệt một cây:

• Duyệt tiền thứ tự (Pre-order Traversal)

• Duyệt trung thứ tự (In-order Traversal)

• Duyệt hậu thứ tự (Post-order Traversal)

Trang 28

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 29

Duyệt tiền thứ tự trong cây nhị phân:

Trong cách thức duyệt tiền thứ tự trong cây nhị phân, nút gốc được duyệt đầu tiên, sau đó sẽ duyệt cây con bên trái và cuối

cùng sẽ duyệt cây con bên phải.

Trang 30

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 31

Duyệt tiền thứ tự trong cây nhị phân:

04

Duyệt cho tới khi tất cả các nút đều được duyệt:

Bước 1: Truy cập nút gốc.

Bước 2: Duyệt các cây con bên trái một cách đệ qui.

Bước 3: Duyệt các cây con bên phải một cách đệ qui.

Code mẫu của in cây theo cách duyệt tiền thứ tự:

void printTree(node *t){

Trang 32

Duyệt trung thứ tự trong cây nhị phân:

Nếu một cây nhị phân được duyệt trung thứ tự, kết quả tạo ra sẽ là các giá trị khóa được sắp xếp theo thứ tự tăng dần.

Trang 33

Duyệt trung thứ tự trong cây nhị phân:

04

Duyệt cho tới khi tất cả các nút đều được duyệt:

Bước 1: Duyệt các cây con bên trái một cách đệ qui.

Bước 2: Truy cập nút gốc.

Bước 3: Duyệt các cây con bên phải một cách đệ qui.

Code mẫu việc in cây theo duyệt trung thứ tự:

void printTree(node *t){

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 34

Duyệt hậu thứ tự trong cây nhị phân:

Trong cách thức duyệt hậu thứ tự trong cây nhị phân, nút gốc của cây sẽ được truy cập cuối cùng, do đó bạn cần chú ý Đầu tiên,

chúng ta duyệt cây con bên trái, sau đó sẽ duyệt cây con bên phải và cuối cùng là duyệt nút gốc.

Trang 35

Duyệt hậu thứ tự trong cây nhị phân:

04

Duyệt cho tới khi tất cả các nút đều được duyệt:

Bước 1: Duyệt các cây con bên trái một cách đệ qui.

Bước 2: Duyệt các cây con bên phải một cách đệ qui.

Bước 3: Truy cập nút gốc.

Code mẫu của in cây theo cách duyệt tiền thứ tự:

void printTree(node *t){

if (t != NULL){

printTree (t- >left);

printTree (t- >right);

cout << t->data << " " ; }

}

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 36

Biểu diễn cây tổng quát bằng cây nhị

phân

- Sơ lược về cây tổng quát

- Biểu diễn cây

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 37

Sơ lược:

Khái niệm: Cây tổng quát là những cây mà trong đó số lượng cây con của của mỗi

nút không cố định Trong thực tế có một số cấu trúc dạng cây tổng quát như:

cấu trúc thư mục trên ổ đĩa hay mục lục của 1 cuốn sách

05

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 38

- Khi biểu diễn cấu trúc cây tổng quát, vì mỗi nút có thể có nhiều con, số con05

lại khác nhau, vì vậy ta không nên dùng cho mỗi nút con liên kết đến nút cha

mà với mỗi nút vẫn chỉ dành hai liên kết, một liên kết (trường EldestChild)

trỏ đến nút con đầu bên trái của nó, một liên kết (trường NextSibling) trỏ

đến nút cùng cha kề bên phải của nó Nếu coi liên kết EldestChild như liên

kết Left, liên kết NextSibling như liên kết Right thì ta được một cây nhị phân

tương đương với cây tổng quát

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

a) Mô tả dạng biểu diễn

Trang 39

a) Mô tả dạng biểu diễn

05

- Khi đó, mỗi nút của cây có thể xem như 1 cấu trúc bản ghi gồm 3 trường: Infor,

EldestChild, NextSibling

EldestChild Infor NextSibling

+ Infor: chứa dữ liệu của nút

+ EldestChild: trỏ tới nút con đầu, trong trường hợp trỏ tới nút lá thì sẽ gán vào giá trị Null.

+ NextSibling: trỏ tới nút cây cùng cha liền kề, trong trường hợp không có nút liền kề thì cũng gán vào giá trị Null.

- Các nút trên cây được tổ chức lưu trữ móc nối thông qua cơ chế lưu địa chỉ.

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 40

b) Thuật toán

- Sử dụng gốc cây tổng quát làm gốc cây nhị phân

- Giữ lại các nút con trái nhất (con đầu) của mỗi nút cha trong cây tổng quát để làm nút con trái của cây nhị phân.

- Các nút con còn lại được chèn làm nút con phải của nút bên trái liền kề nó.

- Lặp lại như vậy để hoàn thành cây cho mỗi nút.

05

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 41

b) Thuật toán

05

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 42

* Ta cũng có thể hiểu một cách trực quan hơn bằng 1

+ Lấy nút ngay bên phải trên cùng một đường

ngang của nút đã chọn để làm nút phải.

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 44

Cú Pháp Biểu Diễn

typedef <kiểu_dữ_liệu> Item;

typedef struct Node // Cấu trúc của Node

{ Item Infor ; Node

Trang 45

Câu hỏi?

Câu 1: Tại sao sử dụng cây nhị phân?

Câu 2: Có mấy phương pháp cài đặt cây nhị phân? Ưu

và nhược điểm của từng cách

Câu 3: Duyệt cây là gì?

Câu 4: Tại sao cần biểu diễn cây tổng quát bằng cây nhị phân?

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 46

Thời Gian: 10 phút

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 47

Tại sao sử dụng cây nhị phân?

Cây nhị phân được sử dụng vào nhiều mục đích khác nhau Tuy nhiênviệc sử dụng cây nhị phân để lưu giữ và tìm kiếm thông tin vẫn là mộttrong những áp dụng quan trọng nhất của cây nhị phân Trong bài viếtnày đề cập lớp cây nhị phân phục vụ cho việc tìm kiếm thông tin, đó

là cây nhị phân tìm kiếm

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 48

Có mấy phương pháp cài đặt cây nhị phân? Ưu

và nhược điểm từng cách

-Có 2 phương pháp cài đặt cây nhị phân

a) Cài đặt bởi mảng: - Ưu điểm:

+ Các phép toán thực hiện tương đối dễ dàng

+ Việc truy cập đến các đỉnh trên cây là trực tiếp, tốc độ truy cập là nhanh và đồng đều đối với mọi phần tử

- Hạn chế:

+ Khi cài đặt gây hiện tựợng dư thừa bộ nhớ

b) Cài đặt bởi con trỏ:

- Ưu điểm:

+ Không có hiện tượng dư thừa bộ nhớ

- Hạn chế:

+ Truy cập đến các phần tử trên cây là truy cập tuần tự, bao giờ cũng xuất phát từ gốc, nên tốc độ

truy cập là chậm TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 49

Duyệt cây là gì?

Duyệt cây là một tiến trình để truy cập tất cả các nút của một cây và cũng có thể in các giá trị của các nút này Bởi vì tất cả các nút được kết nối thông qua các cạnh (hoặc các link), nên chúng ta luôn luôn bắt đầu truy cập từ nút gốc Do đó, chúng ta không thể truy cập ngẫu nhiên bất kỳ nút nào trong cây Có ba phương thức mà chúng ta có thể sử dụng để duyệt một cây:

Duyệt tiền thứ tự (Pre-order Traversal)

Duyệt trung thứ tự (In-order Traversal)

Duyệt hậu thứ tự (Post-order Traversal)

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 50

Tại sao cần biểu diễn cây tổng quát bằng cây nhị phân?

Nhược điểm của các cấu trúc cây tổng quát:

- Bậc của các nút trên cây có thể dao động trong một biên độ lớn khiến việc biểu diễn gặp khó khăn và lãng phí.

- Các thao tác trên cây tổng quát phức tạp hơn cây nhị phân rất nhiều.

Vì vậy, khi không quá cần thiết phải sử dụng cây tổng quát, người ta thường chuyển cây tổng

quát thành cây nhị phân Sau khi chuyển thành cây nhị phân tương đương, ta có thể lưu trữ bằng danh sách liên kết và thực hiện các thao tác như với cây nhị phân.

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 51

Câu hỏi?

Bài 1 Kiểm tra hai cây nhị phân có giống nhau hay không:

Viết một chương trình in ra hai cây nhị phân, sau đó so sánh chúng có giống nhau hay không (tức là so sánh cả cấu trúc và nội dung) và in kết quả ra màn hình.

Bài 2 Xóa 1 cây nhị phân:

Viết chương trình xóa 1 cây nhị phân bằng cách xóa phân bổ mọi nút đơn trong cây mà

không thay đổi tham chiếu của nút gốc thành null.

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 52

Thời Gian: 20 phút

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Trang 53

THANKS FOR LISTENING

Trang 54

TIEU LUAN MOI download : skknchat123@gmail.com moi nhat

Ngày đăng: 10/10/2022, 05:18

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w