Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 21: Cây nhị phân tìm kiếm

14 21 0
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 21: Cây nhị phân tìm kiếm

Đ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 – Bài 21: Cây nhị phân tìm kiếm thông tin đến các bạn những kiến thức về khái niệm cây nhị phân tìm kiếm, các thao tác trên cây nhị phân tìm kiếm, một vài ví dụ sử dụng cây nhị phân tìm kiếm.

Cấu trúc liệu giải thuật Bài 21 Cây nhị phân tìm kiếm Giảng viên: TS Ngo Huu Phuc Tel: 0438 326 077 Mob: 098 5696 580 Email: ngohuuphuc76@gmail.com @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University Bài 21: Cây nhị phân tìm kiếm Nội dung: 21.1 Khái niệm nhị phân tìm kiếm 21.2 Các thao tác nhị phân tìm kiếm 21.3 Một vài ví dụ sử dụng nhị phân tìm kiếm Tham khảo: Deshpande Kakde: C and Data structures.chm, Chapter 20: Linked Lists Elliz Horowitz – Fundamentals of Data Structures.chm, Chapter 4: Linked Lists Kyle Loudon: Mastering Algorithms with C.chm, Chapter Linked Lists Bài giảng TS Nguyễn Nam Hồng @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 21.1 Khái niệm nhị phân tìm kiếm (1/4) Khái niệm:  Cây nhị phân tìm kiếm rỗng mà node có chứa khóa  Các khóa node bên trái nhỏ khóa root, khóa node bên phải lớn khóa root  Cây bên trái phải nhị phân tìm kiếm  Việc quản lý nhị phân thông qua node root @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 21.1 Khái niệm NPTK (2/4) 50 30 60 25 40 35 70 65 Ví dụ nhị phân tìm kiếm @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 21.1 Khái niệm NPTK (3/4) Một số tính chất NPTK:  Cây nhị phân tìm kiếm tập nhị phân, nên có cách duyệt LNR, LRN, NLR  Với nhị phân tìm kiếm, duyệt theo kiểu inorder ta dãy theo chiều tăng dần  Cây nhị phân tìm kiếm cấu trúc tìm kiếm hiệu Việc tìm kiếm nhị phân tìm kiếm nhanh tìm kiếm Tuy nhiên, việc biểu diễn dạng mảng gây khó khăn cho việc thêm, bớt  Với việc biểu diễn dạng liên kết, ta có độ phức tạp việc tìm kiếm O( logn) @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 21.1 Khái niệm NPTK (4/4) Cấu trúc nhị phân tìm kiếm: template struct tbnode { TreeEntry data; struct tbnode *lchild, *rchild; }; @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 21.2 Các thao tác NPTK (1/) Một số thao tác nhị phân tìm kiếm: Khởi tạo NPTK TBInsert: Thêm node vào NPTK TBCount: đếm số node NPTK TBRInorder: duyệt dạng inorder TBRPostorder: duyệt dạng postorder TBRPreorder: duyệt dạng preorder TBLevelorder: duyệt dạng levelorder TBDelete: xóa node NPTK TBGetptr: định vị node node cha @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 21.2 Các thao tác NPTK (2/) Khai báo lớp nhị phân tìm kiếm: template class TBTree { public: TBTree(); int TBInsert(TreeEntry value); int TBCount(); void TBRInorder(tbnode* treenode, QueueClassC *q); void TBRPostorder(tbnode* treenode, QueueClassC *q); void TBRPreorder(tbnode* treenode, QueueClassC *q); void TBInorder(QueueClassC* q); void TBPostorder(QueueClassC* q); void TBPreorder(QueueClassC* q); void TBLevelorder(QueueClassC* q); void TBGetptr(tbnode **father, tbnode **curr, TreeEntry value); int TBDelete(TreeEntry value); template friend void TreePrint(TBTree tree, int type); private: tbnode * root; }; @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 21.2 Các thao tác NPTK (3/) Khởi tạo NPTK: template TBTree::TBTree() { root=NULL; } @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University root NULL 21.2 Các thao tác NPTK (4/) Thêm node vào NPTK: root  Nếu rỗng, cấp phát ô nhớ cho trỏ root  Nếu không rỗng: 50  Sử dụng trỏ temp temp1 để NULL xác định vị trí cần thêm (con trỏ temp1 trỏ vào NULL, trỏ temp trỏ vào node cha node mới)  Tùy thuộc vào giá trị thêm vào cấp phát ô nhớ cho temp->left hay temp->right temp 25 60 40 35 70 NULL NULL 10 NULL 50 30 Thêm node có giá trị 45 vào @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 45 65 NULL 21.2 Các thao tác NPTK (5/) Thêm node vào NPTK template int TBTree::TBInsert(TreeEntry value) { int kt=0; tbnode * temp, *temp1; if(root==NULL) { root = (tbnode *) malloc(sizeof(tbnode)); if (root==NULL) { printf("Khong du bo nho"); return kt; } kt=1; root->data=value; root->lchild=root->rchild=NULL; } else { temp1=root; while(temp1!=NULL) { temp=temp1; if(temp1->data>value) 11 temp1=temp1->lchild; else temp1=temp1->rchild; } if(temp->data>value) { temp->lchild = (tbnode *) malloc(sizeof(tbnode)); if(temp->lchild==NULL) { printf("Khong du bo nho"); return kt; } kt=1; temp=temp->lchild; temp->data=value; temp->lchild=temp->rchild=NULL; } else { temp->rchild = (tbnode *) malloc(sizeof(tbnode)); if(temp->rchild==NULL) { printf("Khong du bo nho"); return kt; } kt=1; temp=temp->rchild; temp->data=value; temp->lchild=temp->rchild=NULL; } } return kt; } @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University Tháng 09 năm 2009 21.2 Các thao tác NPTK (6/) Xóa node NPTK: Xóa node khơng có 12 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 21.2 Các thao tác NPTK (7/) Xóa node NPTK: 13 Xóa node có @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 21.2 Các thao tác NPTK (8/) Xóa node NPTK: 14 Xóa node có @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University .. .Bài 21: Cây nhị phân tìm kiếm Nội dung: 21.1 Khái niệm nhị phân tìm kiếm 21.2 Các thao tác nhị phân tìm kiếm 21.3 Một vài ví dụ sử dụng nhị phân tìm kiếm Tham khảo: Deshpande... NPTK:  Cây nhị phân tìm kiếm tập nhị phân, nên có cách duyệt LNR, LRN, NLR  Với nhị phân tìm kiếm, duyệt theo kiểu inorder ta dãy theo chiều tăng dần  Cây nhị phân tìm kiếm cấu trúc tìm kiếm. .. niệm nhị phân tìm kiếm (1/4) Khái niệm:  Cây nhị phân tìm kiếm rỗng mà node có chứa khóa  Các khóa node bên trái nhỏ khóa root, khóa node bên phải lớn khóa root  Cây bên trái phải nhị phân tìm

Ngày đăng: 24/09/2020, 04:29

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

Tài liệu liên quan