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

49 11 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 Và Giải Thuật
Thể loại bài thuyết trình
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 49
Dung lượng 809,56 KB

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

Trang 3

Nhị Phân

(binary tree)

Trang 4

02 03

04 05

Khái niệm Một số tính chất của cây nhị phân

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

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

Trang 5

Khái Niệm

- 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.

- Nút lá là nút không có nút con nào.

- 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.

- 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ữ liệu tuyến tính, cây là cấu trúc dữ liệu phân cấp.

Trang 7

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

- Cây lệch trái

- Cây lệch phải

- Cây zic-zắc

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ối cù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

Trang 9

Các ứng dụng chính của cây

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

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

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

Các thuật toán của bộ định tuyến

Hình thức ra quyết định nhiều giai

đoạn

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

Trang 11

03

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 đỉnhLeft: 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 mảng này

Trang 12

Ví dụ:

A

C

E D

B

F

1 2

Trang 14

03

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

Trang 15

C

E D

Trang 16

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

Trang 17

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ây7- Tạo cây mới từ hai cây có sẵn8- Tìm một đỉnh có khóa x trên cây

Trang 19

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 tra biến

Trang 20

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òn nếu cây rỗng thì trả về giá trị NULL

bTree2 leftChild(bTree2 T)

{

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

else return NULL;

}

Trang 22

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)

{

if ( emptyTree(T) ) return 0;

else return 1+numberNodes (leftChild(T))+ numberNodes (rightChild(T));

}

Trang 23

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

+ Đổ x vào ngăn data của ô nhớ vừa cấp phát

+ Gắn a, b tương ứng vào nhánh trái, phải của gốc

Trang 24

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ếu nú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ằng NULL ( 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ội dung 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án tì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 đó

Trang 25

• 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 26

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 27

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

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){

04

Trang 28

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 29

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

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){

04

Trang 30

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 31

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

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 << " " ; }

}

04

Trang 32

Biểu diễn

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

Trang 33

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

Trang 34

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

- 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ố con

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

Trang 35

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

- 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

+ 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ỉ.

EldestChild Infor NextSibling

Trang 36

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.

Trang 37

b) Thuật toán

Trang 38

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

+ 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

1

11 10

9 8

7 6

05

Trang 39

1 2

9 6

05

Trang 40

Cú Pháp Biểu Diễn

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

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

Trang 41

Câu hỏi?

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

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?

Trang 42

Thời Gian: 10 phút

Trang 43

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ên việc sử dụng cây nhị phân để lưu giữ và tìm kiếm thông tin vẫn là một trong những áp dụng quan trọng nhất của cây nhị phân Trong bài viết nà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

Trang 44

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ỏ:

Trang 45

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)

Trang 46

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.

Trang 47

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.

Trang 48

Thời Gian: 20 phút

Trang 49

THANKS FOR LISTENING

Ngày đăng: 10/10/2022, 00:16

HÌNH ẢNH LIÊN 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. - 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
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 (Trang 5)

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