Giáo án - Bài giảng: KHÁI NIỆM CÂY TRONG LẬP TRÌNH

21 733 1
Giáo án - Bài giảng: KHÁI NIỆM CÂY TRONG LẬP TRÌNH

Đ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

Cay (Tree) Khái niệm Cây đồ thị định hướng thỏa mãn tính chất sau: Có đỉnh đặc b iệt gọi g ố c M ỗi đỉnh c b ất kỳ gốc, tổn đỉnh p có cung từ p đến c Đỉnh p gọi cha đỉnh c, c p Có đường từ gốc tới đỉnh G ốc Cai dat cay bang mang tro Template ro o t class Node { Item data; L ist children; A \ } B C N od e* root; / (X em hinh v e ) I E x Cai dat cay bang hai tro template class Node { Item data; Node* firstChild; Node* nextSiblii } ; N od e* root; Duyệt Duyệt theo thứ tự trước • Thăm g ố c r • D uyệt lầ n lượt T p , T k theo thứ tự trư c mức mức mức A BEFCD G Duyệt theo thứ tự trước Template Preorder (Node* root) { visit (root); for each child r Preorder (r); Duyệt theo thứ tự sau • D u yệt lầ n lượt T p , T k theo th ứ • Thăm g ố c r mức mức mức EFBC G D A tự sau Duyệt theo thứ tự sau Template Postorder (Node* root) { for each child r Postorder (r); visit (root); } Cây nhị phân template Class Node { Item data; // Dữ liệu chứa đỉnh Node* left; Node* right; Các kiểu nhị phân đủ Cây nhị phân cân bằng: ĐỘ cao bến trái bên phải chênh khơng q Problem Bài tốn: Cho danh sách đối tượng, tổ chức cấu trúc liệu đ ể thực phép toán cách hiệu quả: • Tim kiếm (search) • Thêm vào (insert) • Xóa (delete) Đáp án: Dùng cấu trúc tìm kiếm nhị phân Cây tìm kiếm nhị phân • Cây nhị phân rỗng tìm kiếm nhị phân • Cây nhị phân khơng rỗng T tìm kiếm nhị phân nếu: - Khóa gốc lớn khóa tất đỉnh trái T l nhỏ khóa tất đỉnh phải Tr a - Cây trái T, phải T r tìm kiếm nhị phân Phép tốn tìm kiếm (search) binarySearchTree (Node* root, lookingData) { if (Root = = NULL) return NULL; else if (root.data = = lookingData) return root else if (root.data < lookingData) return binarySearchTree (root.right, lookingData) else return binarySearchTree (root.left, lookingData) } Phép tốn tìm kiếm phần tử nhỏ - lớn //Root != NULL Min (Node* root) { if (Root left = = NULL) return root else return Min (root.left) } Max (Node* root) { if (Root right = = NULL) return root else return Max (root.right) } Phép toán thêm vào (insert) insert (Node* root, insertData) { if (Root = = NULL) Root

Ngày đăng: 16/04/2014, 17:24

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan