1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Cấu trúc dữ liệu và giải thuật: Cây nhị phân - TS. Trần Ngọc Việt

44 9 1

Đ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 44
Dung lượng 3,24 MB

Nội dung

Bài giảng Cấu trúc dữ liệu và giải thuật: Cây nhị phân được biên soạn gồm các nội dung chính sau: tổng quan về cây nhị phân; thao tác trên cây; các loại cây; cây nhị phân; duyệt cây nhị phân. Mời các bạn cùng tham khảo!

KHÁI NIỆM CƠ BẢN  Cây cấu trúc phân tầng phần tử gọi nút (node) • Mỗi node chứa phần tử đơn • Mỗi phần tử có nhiều nhánh kết nối với nút khác, gọi nút  Mọi có nút gốc – root • Mọi nút trừ nút gốc nút khác – nút cha KHOA CÔNG NGHỆ THÔNG TIN 3 CẤU TRÚC CÂY TRONG THỰC TẾ  Thơng thường mơ hình tổ chức có cấu trúc cây: • Một tổ chức khơng có thứ tự có cấu trúc phân tầng, tổ chức phòng ban thương mại University Engineering Medicine Science Chemistry Physics KHOA CÔNG NGHỆ THÔNG TIN Education Maths Law Arts Languages History 4 CẤU TRÚC CÂY TRONG THỰC TẾ  Sơ đồ phân loại sinh học loại phổ biến  Cây khơng có thứ tự có tổ chức phân lớp animals worms ants insects beetles arachnids vertebrates stars flies fish reptites birds sponges mammals snakes lizards crocodiles KHOA CÔNG NGHỆ THÔNG TIN CẤU TRÚC CÂY TRONG THỰC TẾ  Tổ chức file thư mục  Chúng tả mơ hình hóa tổ chức file cách dùng không xếp theo mơ hình nút lá, thư mục nút cha root doc bin cp KHOA CÔNG NGHỆ THÔNG TIN grep lib sort etc mail motd tmp users passwd Thao tác cấu trúc Nó phải  truy cập vào nút gốc  truy cập tất tổ tiên nút  truy cập tất cháu nút  thêm nút vào cây,  xóa nút định khỏi  Duyệt KHOA CÔNG NGHỆ THÔNG TIN Một số định nghĩa KHOA CÔNG NGHỆ THÔNG TIN Một số định nghĩa  Cây xếp khơng xếp  Cây khơng có thứ tự, hình dạng Theo nghĩa cấu trúc, trơng giống  Đối với nút định nào, khơng có thứ tự áp đặt cho nút nút KHOA CƠNG NGHỆ THƠNG TIN Một số định nghĩa  Một có thứ tự áp đặt thứ tự nút  Có nhiều chiến lược xếp thứ tự, theo nghĩa đơn giản nhất, thứ tự áp đặt cách gán số khác cho nút nút  Lưu ý thứ tự duyệt không giống KHOA CÔNG NGHỆ THÔNG TIN 10 Định nghĩa  Cây NPTK cân • Là nhị phân tìm kiếm • Tại nút: số nút nhánh trái nhánh phải chênh lệch ko nút! P Cây bên trái KHOA CÔNG NGHỆ THÔNG TIN nL(p): số nút trái nút p nR(p): số nút phải nút p Cây bên phải 30 30 30 Các tác vụ xoay  Quá trình cập nhật nhị phân tìm kiếm thường làm cân  Thao tác: • Xoay trái RotateLeft • Xoay phải RotateRight KHOA CÔNG NGHỆ THÔNG TIN 31 31 Các tác vụ xoay  RotateLeft Xoay trái nút r Cây a Cây b r Nút p trở thành nút gốc sau xoay p a b c Cây c KHOA CÔNG NGHỆ THÔNG TIN 32 32 Các tác vụ xoay  RotateLeft p r Sau xoay a b KHOA CÔNG NGHỆ THÔNG TIN r p c a c b 33 33 Các tác vụ xoay  RotateRight r p Sau xoay phải p a KHOA CÔNG NGHỆ THÔNG TIN c b r a b c 34 34 34 BÀI TẬP Xét tác vụ insert remove để thêm nút xoá nút BST • Vẽ lại hình ảnh BST thêm nút vào theo thứ tự sau: 8, 3, 5, 2, 20, 11, 30, 9, 18, • Vẽ lại hình ảnh ta lần lược xoá nút 20 Cài đặt cấu trúc liệu liên kết cho BST, với thao tác: • Cài đặt thao tác xây dựng cây: Init, IsEmpty, CreateNode • Cài đặt thao tác cập nhật: Insert, Remove KHOA CÔNG NGHỆ THƠNG TIN 35 35 35 BÀI TẬP Ví dụ: Cho nhị phân sau 30 \ 20 40 / \ / \ 10 24 34 46 / \ / \ 14 22 27 (x = 22 < 30) / (22 > 20) (22 < 24) (x = 22) Tìm kiếm node có giá trị x = 22 Thực bước sau: Bước 1: Bắt đầu, từ node gốc có giá trị 30 Do 22 < 30, nên node cần tìm phía bên trái; Bước 2: Node gốc bên trái 20, 22> 20, nên node cần tìm bên phải này; Bước 3: Node 24, 22 < 24, nên node cần tìm bên trái con; Bước 4: Node có giá trị x=22, nên ta thu node cần tìm nhị phân KHOA CÔNG NGHỆ THÔNG TIN 36 36 36 BÀI TẬP Bài tập: Cho nhị phân sau 50 / \ 25 55 / \ / \ 20 32 38 58 / \ / \ 16 24 28 37 a)Tìm kiếm node có giá trị x = 38 b)Tìm kiếm node có giá trị x = 24 c)Lập nhị phân gồm mức 0, mức 1, mức 2, mức KHOA CÔNG NGHỆ THÔNG TIN 37 37 37 BÀI TẬP Phương pháp chia h(x) = x % M a)Tính giá trị băm cho khóa 1533 ; 3471, 1363, 2564 M = (Chọn số lẻ – kích thước bảng) b)Tính giá trị băm cho khóa 29, 18, 40, 15, 32, 59 M = (Chọn số lẻ – kích thước bảng) Cho nhị phân sau 70 / 65 / 40 / \ 36 54 \ 72 / 48 \ 75 / \ 58 88 / 45 a)Tìm kiếm node có giá trị x = 45 b)Lập nhị phân gồm mức 0, mức 1, mức 2, mức KHOA CÔNG NGHỆ THÔNG TIN 38 38 38 #Thực hành 01: >>> class treeNode: def init (self,val = None): self.val = val self.left = None self.right = None >>> >>> >>> >>> >>> >>> >>> >>> root = treeNode(10) root.left = treeNode(7) root.right = treeNode(13) root.left.left = treeNode(5) root.left.right = treeNode(8) print(root.left.right.val) # -> print(root.left.left.val) # # # # # # >>> # # # # # # -> 10 / \ # # # # # KHOA CÔNG NGHỆ THÔNG TIN 13 10 / \ 13 / \ 39 39 39 #Thực hành 02: >>> class BinaryTreeNode: def init (self, data): self.data = data self.leftChild = None self.rightChild=None >>> def insert(root,newValue): if root is None: root=BinaryTreeNode(newValue) return root if newValue>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> root= insert(None,15) insert(root,10) insert(root,25) insert(root,6) insert(root,14) insert(root,20) insert(root,60) a1=root a2=a1.leftChild a3=a1.rightChild a4=a2.leftChild a5=a2.rightChild KHOA CÔNG NGHỆ THÔNG TIN 40 40 40 #Thực hành 02: >>> a6=a3.leftChild >>> a7=a3.rightChild >>> print("Root Node is:") Root Node is: >>> print(a1.data) 15 >>> print("left child of node is:") left child of node is: >>> print(a1.leftChild.data) 10 >>> print("right child of node is:") right child of node is: >>> print(a1.rightChild.data) 25 >>> print("Node is:") Node is: >>> print(a2.data) 10 >>> print("left child of node is:") left child of node is: >>> print(a2.leftChild.data) >>> print("right child of node is:") right child of node is: >>> print(a2.rightChild.data) 14 >>> print("Node is:") Node is: >>> print(a3.data) 25 KHOA CÔNG NGHỆ THÔNG TIN 41 41 41 #Thực hành 02: >>> print("left child of node is:") left child of node is: >>> print(a3.leftChild.data) 20 >>> print("right child of node is:") right child of node is: >>> print(a3.rightChild.data) 60 >>> print("left child of node is:") left child of node is: >>> print(a5.leftChild) None >>> print("right child of node is:") right child of node is: >>> print(a5.rightChild) None >>> print("Node is:") Node is: >>> print(a4.data) >>> print("left child of node is:") left child of node is: >>> print(a4.leftChild) None >>> print("right child of node is:") right child of node is: >>> print(a4.rightChild) None >>> print("Node is:") Node is: >>> print(a6.data) 20 >>> print("left child of node is:") left child of node is: >>> print(a6.leftChild) None >>> print("right child of node is:") right child of node is: >>> print(a6.rightChild) None >>> print("Node is:") Node is: >>> print(a5.data) 14 >>> print("Node is:") Node is: >>> print(a7.data) 60 >>> print("left child of node is:") left child of node is: >>> print(a7.leftChild) None >>> print("right child of node is:") right child of node is: >>> print(a7.rightChild) None KHOA CÔNG NGHỆ THÔNG TIN 42 42 42 #Thực hành 02: >>> # # # # # # # # # # 15 / 10 /\ 14 KHOA CÔNG NGHỆ THÔNG TIN \ 25 /\ 20 60 43 43 43 ... – nút cha KHOA CÔNG NGHỆ THÔNG TIN 3 CẤU TRÚC CÂY TRONG THỰC TẾ  Thơng thường mơ hình tổ chức có cấu trúc cây: • Một tổ chức khơng có thứ tự có cấu trúc phân tầng, tổ chức phòng ban thương mại... bên trái (lp->right==NULL) • Nút nhỏ bên phải (rp->left==NULL) lp - Nút lớn bên trái KHOA CÔNG NGHỆ THÔNG TIN Rp - Nút nhỏ bên phải 27 27 CÂU HỎI Cài đặt cấu trúc liệu liên kết cho nhị phân tìm... tả liệu  Cấu trúc đơn giản nhất, nút có tối đa nút  Tại nút gồm thành phần • Phần data: chứa giá trị, thơng tin… • Liên kết đến nút trái (nếu có) • Liên kết đến nút phải (nếu có)  Cây nhị phân

Ngày đăng: 27/01/2023, 08:34

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

TÀI LIỆU LIÊN QUAN