Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5.1 - Trần Minh Thái (2016)

53 45 0
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5.1 - Trần Minh Thái (2016)

Đ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

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 5: Cây nhị phân tìm kiếm – Cây cân bằng cung cấp cho người học các khái niệm cây nhị phân tìm kiếm – Cây cân bằng, đặc điểm, định nghĩa cấu trúc dữ liệu, các lưu ý khi cài đặt, các thao tác xử lý. Mời các bạn cùng tham khảo.

Chương Cây nhị phân tìm kiếm – Phần Trần Minh Thái Email: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn Nội dung Khái niệm Đặc điểm Định nghĩa cấu trúc liệu Các lưu ý cài đặt Các thao tác xử lý Khái niệm  Bậc nút: số nút  Bậc cây: bậc lớn nút Cây có bậc n gọi n-phân 2 1  Nút gốc: nút khơng có nút cha  Nút lá: nút có bậc  Nút nhánh: nút có bậc khác khơng phải gốc 0 Khái niệm Chiều dài đường đến nút x: số nhánh cần qua kể từ gốc đến x Mức Chiều cao h cây: Mức lớn nút Mức Mức Mức xx Đặc điểm nhị phân Số nút mức I ≤ 2I-1 Số nút mức ≤ 2h-1, với h chiều cao Chiều cao h ≥ log2N, với N số nút Biểu diễn nhị phân Cây nhị phân cấu trúc bao gồm phần tử (node) kết nối với theo quan hệ “cha-con” với cha có tối đa Mỗi nút gồm thông tin: Dữ liệu lưu trữ: data Liên kết tới trái nút: pLeft Liên kết tới phải nút: pRight Cấu trúc node data Giá trị TNode Nút Trỏ trái pLeft Trỏ phải public class CMyTNode { T data; CMyTNode pLeft = null; CMyTNode pRight = null; //Các phương thức } pRight Ví dụ khai báo node chứa giá trị nguyên public class CMyIntTNode { int data; CMyIntTNode pLeft = null; CMyIntTNode pRight = null; //Các phương thức } Cây nhị phân tìm kiếm  Là nhị phân  Giá trị node lớn giá trị node nhánh trái nhỏ giá trị node nhánh 77 phải Nút có giá trị nhỏ nằm nút trái 33 36 36 11 66 44 15 15 Nút có giá trị lớn nằm nút phải 40 40 23 23 Các thao tác Tạo Duyệt Cho biết thông tin Tìm kiếm Xố node 10 Xóa node 77 33 36 36 11 66 44 15 15 40 40 Node Node có Node có 23 23 39 Xóa node 77 33 36 36 11 66 44 15 15 Xóa Xóa 23 40 40 23 23 40 Xóa node Node cha 77 33 36 36 11 66 44 15 15 Xóa 40 40 23 23 41 Xóa node 77 33 36 36 11 66 44 15 15 Xóa 15 40 40 23 23 42 Xóa node có Bước 1: Tìm node mạng  Cách 1: Tìm node trái phải  Cách 2: Tìm node phải trái 77 Bước 2: Thay giá trị node mạng vào node cần xóa 33 36 36 11 66 15 15 44 Bước 3: Xóa node mạng 40 40 23 23 16 16 43 Xóa node Xóa 36 Bước 1: Tìm node mạng 77 33 36 36 11 66 15 15 44 40 40 23 23 Node mạng 16 16 44 Xóa node Xóa 36 Bước 2: Thay giá trị node mạng cho node cần 77 xóa 33 23 23 11 66 15 15 44 Cập nhật giá trị 40 40 23 23 Node mạng 16 16 45 Xóa node Xóa 36 Bước 3: Xóa node mạng 77 33 23 23 11 66 15 15 44 40 40 23 23 Xóa 16 16 46 Xóa node Kết quả: xóa 36 77 33 23 23 11 66 44 15 15 40 40 16 16 47 VD xóa node NPTK số nguyên class CMyIntBinaryTree public bool Remove(int x) { if (root == null) return false; if (root.Data == x) { CMyIntTNode tmp = new CMyIntTNode(0); tmp.PLeft = root; bool kq= root.Remove(x, tmp); root = tmp.PLeft; return kq; } return root.Remove(x, null); } 48 class CMyIntTNode public bool Remove(int x, CMyIntTNode parent) { if (x < this.data) { if (pLeft != null) return pLeft.Remove(x, this); else return false; } else if (x > this.Data) { if (pRight != null) return pRight.Remove(x, this); else return false; } 49 public int MinValue () { if (pLeft == null) return data; return pLeft.MinValue (); else } { if (pLeft != null && pRight != null) { this.Data = pRight.MinValue (); pRight.Remove(this.Data, this); } else if (parent.pLeft == this) { parent.pLeft = (pLeft != null) ? pLeft : pRight; } else if (parent.pRight == this) { parent.pRight = (pLeft != null) ? pLeft : pRight; } return true; } } 50 Cho dãy số theo thứ tự nhập từ trái sang phải: 20, 15, 35, 30, 11, 13, 17, 36, 47, 16, 38, 28, 14 Vẽ nhị phân tìm kiếm cho dãy số Cho biết kết duyệt theo thứ tự trước, sau Cho biết độ cao cây, nút lá, nút có bậc Vẽ lại sau thêm nút: 25 91 Trình bày bước vẽ lại sau xoá nút: 11 35 51 Bài tập Cài đặt lớp CMyBinaryTree (mỗi node có giá trị kiểu chung) hoàn chỉnh gồm phương thức: Tìm kiếm Xóa 52 Đánh giá  Thao tác tìm kiếm, thêm mới, xóa có độ phức tạp trung bình O(h)  TH tốt nhất, có n nút có độ cao h = log2(n)  Chi phí tìm kiếm tương đương tìm nhị phân mảng có thứ tự  TH xấu nhất, bị suy biến thành DSLK  thao tác có độ phức tạp O(n)  Vì cần có cải tiến cấu trúc CNPTK để đạt chi phí cho thao tác log 2(n) 53 ... nút mức I ≤ 2I-1 Số nút mức ≤ 2h-1, với h chiều cao Chiều cao h ≥ log2N, với N số nút Biểu diễn nhị phân Cây nhị phân cấu trúc bao gồm phần tử (node) kết nối với theo quan hệ “cha-con” với cha... dung Khái niệm Đặc điểm Định nghĩa cấu trúc liệu Các lưu ý cài đặt Các thao tác xử lý Khái niệm  Bậc nút: số nút  Bậc cây: bậc lớn nút Cây có bậc n gọi n-phân 2 1  Nút gốc: nút khơng có nút... “cha-con” với cha có tối đa Mỗi nút gồm thông tin: ? ?Dữ liệu lưu trữ: data Liên kết tới trái nút: pLeft Liên kết tới phải nút: pRight Cấu trúc node data Giá trị TNode Nút Trỏ trái pLeft Trỏ

Ngày đăng: 09/05/2021, 14:24

Từ khóa liên quan

Mục lục

  • Slide 1

  • Nội dung

  • Khái niệm

  • Khái niệm

  • Đặc điểm của cây nhị phân

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

  • Cấu trúc của một node

  • Ví dụ khai báo node chứa giá trị nguyên

  • Cây nhị phân tìm kiếm

  • Các thao tác cơ bản

  • Tạo cây

  • Khai báo cấu trúc cây nhị phân

  • Chèn một phần tử có giá trị x vào cây: TNode(x)

  • Tạo TNode có giá trị x

  • Slide 15

  • Slide 16

  • Bài tập

  • Duyệt cây

  • Slide 19

  • Hàm duyệt NLR

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

Tài liệu liên quan