Bài giảng Cấu trúc dữ liệu: Chương 5 - Cấu trúc dữ liệu cây
lượt xem 4
download
Dưới đây là bài giảng Cấu trúc dữ liệu: Chương 5 - Cấu trúc dữ liệu cây. Mời các bạn tham khảo bài giảng để bổ sung thêm kiến thức về định nghĩa; cây nhị phân (cây nhị phân tìm kiếm, cây nhị phân cân bằng). Với các bạn chuyên ngành Công nghệ thông tin thì đây là tài liệu hữu ích.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Cấu trúc dữ liệu: Chương 5 - Cấu trúc dữ liệu cây
- Chương 5 Cấu trúc dữ liệu cây
- 5.1. Định nghĩa Câ là một Cây ột cấu ấ trúc t ú trong t đó bao b gồm ồ các á nút út được đượ liên kết với nhau theo hệ thống phân cấp, trong đó nút có cấp cao nhất được gọi là nút gốc và nút có cấp thấp nhất được gọi là các nút lá. lá 19/12/2008 Cấu trúc dữ liệu 1 2
- 5.1. Định nghĩa 19/12/2008 Cấu trúc dữ liệu 1 3
- 5.1. Định nghĩa • Thuật ngữ: - Nút cha (parents node) của một node là nút có cấp cao hơn nó một bậc. bậc - Nút con (child node) của một node là nút có cấp nhỏ hơn nó một bậc. bậc - Nút gốc (root) là nút không có nút cha. - Nút lá (leaf – leaves) là nút không có nút con. - Cấpp của 1 nút ((level of a node)) là các liên kết để đi từ nút gốc đến nút đó. 19/12/2008 Cấu trúc dữ liệu 1 4
- 5.2. Cây nhị phân 5 2 1 Khái niệm về cây nhị phân 5.2.1. Cây nhị phân là một cây mà mỗi ỗ nút có không quá 2 nút con 19/12/2008 Cấu trúc dữ liệu 1 5
- 5.2. Cây nhị phân tìm kiếm 5 2 2 Cây nhị phân tìm kiếm 5.2.2. Cây nhị phân tìm kiếm là một cây nhị phân trong đó nút của nó được tổ chức để luôn thỏa tính chất sau đây “Giá Giá trị của nút cha luôn lớn hơn giá trị tất cả nút con bên trái và nhỏ hơn giá trị của tất cả nút con bên phải”. 19/12/2008 Cấu trúc dữ liệu 1 6
- 5.2. Cây nhị phân 5 2 2 Cây nhị phân tìm kiếm 5.2.2. 19/12/2008 Cấu trúc dữ liệu 1 7
- 5.2. Cây nhị phân 5 2 2 Cây nhị phân tìm kiếm 5.2.2. Biểu diễn cây nhị phân tìm kiếm struct Node { int key; Node * left, * right; }; typedef Node *pNode; struct t t Tree T { pNode root; }; 19/12/2008 Cấu trúc dữ liệu 1 8
- 5.2. Cây nhị phân 5 2 2 Cây nhị phân tìm kiếm 5.2.2. Các thao tác trên cây nhị phân tìm kiếm Khởi tạo cây void id Initial iti l (Tree ( &t) t) { t.root = NULL; } Kiểm tra cây rỗng int isEmpty (Tree t) { return (t.root (t root == NULL); } 19/12/2008 Cấu trúc dữ liệu 1 9
- 5.2. Cây nhị phân 5 2 2 Cây nhị phân tìm kiếm 5.2.2. Các thao tác trên cây nhị phân tìm kiếm Thêm một nút vào cây Giả sử cần thêm 1 nút có khóa k vào cây t. - So sánh với nút gốc: nếu nhỏ hơn thì sang trái, trái lớn hơn thì sang phải. - So sánh với nút gốc của cây con bên trái (phải) và lặp lại quá trình trên cho đến khi tìm được vị trí thích hợp. 19/12/2008 Cấu trúc dữ liệu 1 10
- 5.2. Cây nhị phân 5 2 2 Cây nhị phân tìm kiếm 5.2.2. Các thao tác trên cây nhị phân tìm kiếm Thê một Thêm ộ nút ú vào à cây â int Ins (pNode &r, int k) { if (!r) // //r==NULL { pNode p = new Node; p -> > key = k; p -> left = p -> right = NULL; r = p; return 1; } if (r -> key == k)return 0; if ( (r -> key y > k)) return Ins ( (r->left,k); , ) else return Ins (r->right,k); } 19/12/2008 Cấu trúc dữ liệu 1 11
- 5.2. Cây nhị phân 5 2 2 Cây nhị phân tìm kiếm 5.2.2. Các thao tác trên cây nhị phân tìm kiếm Thêm một nút vào cây int i t Insert t (Tree ( &t, t int i t k) { return Insert (t.root,k); } 19/12/2008 Cấu trúc dữ liệu 1 12
- 5.2. Cây nhị phân 5 2 2 Cây nhị phân tìm kiếm 5.2.2. Các thao tác trên cây nhị phân tìm kiếm Thêm một nút vào cây int i t Insert t (Tree ( &t, t int i t k) { return Ins (t.root,k); } 19/12/2008 Cấu trúc dữ liệu 1 13
- 5.2. Cây nhị phân 5 2 2 Cây nhị phân tìm kiếm 5.2.2. Các thao tác trên cây nhị phân tìm kiếm Tạo cây void CreateTree (Tree &t) { int k; do { cout
- 5.2. Cây nhị phân 5 2 2 Cây nhị phân tìm kiếm 5.2.2. Các thao tác trên cây nhị phân tìm kiếm Duyệt cây NLR (Node – Left – Right): 44 18 13 15 37 23 40 88 59 55 71 108 LNR (Left – Node – Right): 13 15 18 23 37 40 44 55 59 71 88 108 LRN (Left – Right – Node): 15 13 23 40 37 18 55 71 59 108 88 44 19/12/2008 Cấu trúc dữ liệu 1 15
- 5.2. Cây nhị phân 5 2 2 Cây nhị phân tìm kiếm 5.2.2. Các thao tác trên cây nhị phân tìm kiếm Duyệt cây void LNR (pNode r) { if (!r) return; lnr(r->left); cout
- 5.2. Cây nhị phân 5 2 2 Cây nhị phân tìm kiếm 5.2.2. Các thao tác trên cây nhị phân tìm kiếm Tìm khóa k có trong cây hay không int Search(pNode r,int k) { if (!r) return 0; if (r->key == k) return 1; if (r->key > k) return Search(r->left,k); else return Search(r->right,k); } int Search(Tree t,int k) { return Search(t.root,k); } 19/12/2008 Cấu trúc dữ liệu 1 17
- 5.2. Cây nhị phân 5 2 2 Cây nhị phân tìm kiếm 5.2.2. Các thao tác trên cây nhị phân tìm kiếm Xóa một nút X - X là nút lá: chỉ đơn giản hủy X vì nó không móc nối đế phần đến hầ tử nào à khác. khá 19/12/2008 Cấu trúc dữ liệu 1 18
- 5.2. Cây nhị phân 5 2 2 Cây nhị phân tìm kiếm 5.2.2. Các thao tác trên cây nhị phân tìm kiếm Xóa một nút X - X chỉ có 1 nút con: trước khi hủy X ta móc nối cha của X với ới con duy d nhấthấ của nó. ó 19/12/2008 Cấu trúc dữ liệu 1 19
- 5.2. Cây nhị phân 5 2 2 Cây nhị phân tìm kiếm 5.2.2. Các thao tác trên cây nhị phân tìm kiếm Xóa một nút X - X có đủ cả 2 con: không thể hủy trực tiếp do X có đủ 2 con ⇒ hủy gián tiếp.ế Thay vì hủy X, ta sẽ tìm một phần ầ tử thế mạng Y. Phần tử này có tối đa một con. Thông tin l tại lưu t i Y sẽẽ được đ chuyển h ể lên lê lưu l tại t i X. X Sau S đó,đó nút út bị hủy thật sự sẽ là Y giống như 2 trường hợp đầu. Vấn đề là phải chọn Y sao cho khi lưu Y vào vị trí của X,X cây vẫn là CNPTK. Có 2 phần tử thỏa mãn yêu cầu: + Phần tử nhỏ nhất (trái nhất) trên cây con phải. phải + Phần tử lớn nhất (phải nhất) trên cây con trái. 19/12/2008 Cấu trúc dữ liệu 1 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu - Bài 1:Tổng quan về cấu trúc dữ liệu và giải thuật
47 p | 174 | 17
-
Bài giảng Cấu trúc dữ liệu 1: Chương 1 - Lương Trần Hy Hiến
7 p | 162 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 8: Cấu trúc dữ liệu ngăn xếp
28 p | 77 | 9
-
Bài giảng Cấu trúc dữ liệu giải thuật: Các kiểu dữ liệu trừu tượng cơ bản - Cấu trúc dữ liệu tuyến tính
92 p | 116 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây đỏ đen - Bùi Tiến Lên
25 p | 78 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 17: Cấu trúc dữ liệu dạng cây
21 p | 77 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các cấu trúc dữ liệu
193 p | 57 | 7
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (2016)
62 p | 94 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (Trường Đại học Hồng Bàng )
62 p | 157 | 6
-
Bài giảng Cấu trúc dữ liệu - Chương 3: Cấu trúc cây
65 p | 58 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AA - Bùi Tiến Lên
30 p | 35 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 – Trần Minh Thái (2017)
67 p | 105 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây - Bùi Tiến Lên
68 p | 40 | 4
-
Bài giảng Cấu trúc dữ liệu: Chương 1 - ThS. Thiều Quang Trung (2018)
44 p | 43 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AVL - Bùi Tiến Lên
38 p | 46 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - Ngô Quang Thạch
24 p | 58 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Th.S Thiều Quang Trung
41 p | 68 | 3
-
Bài giảng Cấu trúc dữ liệu giải thuật: Cấu trúc dữ liệu
17 p | 50 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn