1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Lecture 13 binary search trees unsaved tài liệu Kỹ thuật Lập trình

13 302 0

Đ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 13
Dung lượng 334,87 KB

Nội dung

Bài 13: Cây nhị phân tìm kiếm Nội dung: 13.1 Khái niệm nhị phân tìm kiếm 13.2 Các thao tác nhị phân tìm kiếm 13.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 PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com / 14 13.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 PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com / 14 13.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 PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com / 14 13.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) PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com / 14 13.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; }; PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com / 14 13.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 PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com / 14 13.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; }; PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com / 14 13.2 Các thao tác NPTK (3/) Khởi tạo NPTK: template TBTree::TBTree() { root=NULL; } root NULL PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com / 14 13.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 50 tem p 30 Thêm node có giá trị 45 vào NULL 25 40 35 60 70 NULL NULL 45 65 NULL PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com / 14 13.2 Các thao tác NPTK (5/) 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; 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) } PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com 10 / 14 13.2 Các thao tác NPTK (6/) Xóa node NPTK: Xóa node khơng có PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com 11 / 14 13.2 Các thao tác NPTK (7/) Xóa node NPTK: Xóa node có PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com 12 / 14 13.2 Các thao tác NPTK (8/) Xóa node NPTK: Xóa node có PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com 13 / 14 ... tmduc08@Gmail.com / 14 13. 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 PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com / 14 13. 1 Khái niệm NPTK (3/4)... Email: tmduc08@Gmail.com 10 / 14 13. 2 Các thao tác NPTK (6/) Xóa node NPTK: Xóa node khơng có PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com 11 / 14 13. 2 Các thao tác NPTK (7/) Xóa... – Email: tmduc08@Gmail.com 12 / 14 13. 2 Các thao tác NPTK (8/) Xóa node NPTK: Xóa node có PhD Tống Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com 13 / 14

Ngày đăng: 28/08/2014, 21:58

TỪ KHÓA LIÊN QUAN