cay tim kiem nhi phan

3 107 0
cay tim kiem nhi phan

Đang tải... (xem toàn văn)

Thông tin tài liệu

http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­‐giai-­‐thuat/index.jsp                                                                            Copyright  ©  vietjack.com     Cây tìm kiếm nhị phân (Binary Search Tree) Cây tìm kiếm nhị phân ? Một tìm kiếm nhị phân (Binary Search Tree – viết tắt BST) mà tất nút có đặc điểm sau: • Cây bên trái nút có khóa (key) nhỏ giá trị khóa nút cha (của này) • Cây bên phải nút có khóa lớn giá trị khóa nút cha (của này) Vì nói rằng, tìm kiếm nhị phân (BST) phân chia tất thành hai phần: bên trái bên phải định nghĩa sau: left_subtree (keys) ≤ node (key) ≤ right_subtree (keys) Biểu diễn tìm kiếm nhị phân (BST) Cây tìm kiếm nhị phân (BST) tập hợp bao gồm nút xếp theo cách để chúng trì tuân theo đặc điểm tìm kiếm nhị phân Mỗi nút có khóa giá trị liên kết với Trong tìm kiếm, khóa cần tìm so sánh với khóa tìm kiếm nhị phân (BST) tìm thấy, giá trị liên kết thu nhận Ví dụ tìm kiếm nhị phân (BST): http://vietjack.com/                                                                                                                              Trang  chia  sẻ  các  bài  học  online  miễn  phí     http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­‐giai-­‐thuat/index.jsp                                                                            Copyright  ©  vietjack.com     Từ hình ví dụ minh họa ta thấy rằng, khóa nút gốc có giá trị 27 tất khóa bên trái bên trái có giá trị nhỏ 27 tất khóa bên phải bên phải có giá trị lớn 27 Hoạt động tìm kiếm nhị phân Dưới số hoạt động thực tìm kiếm nhị phân: • Hoạt động tìm kiếm: tìm kiếm phần tử • Hoạt động chèn: chèn phần tử vào • Hoạt động duyệt tiền thứ tự: duyệt theo cách thức duyệt tiền thứ tự • Hoạt động duyệt trung thứ tự: duyệt theo cách thứ duyệt trung thứ tự • Hoạt động duyệt hậu thứ tự: duyệt theo cách thức duyệt hậu thứ tự Nút (Node) tìm kiếm nhị phân Một nút có vài liệu, tham chiếu tới nút bên trái nút bên phải struct node { *rightChild; }; int data; struct node *leftChild; struct node Hoạt động tìm kiếm tìm kiếm nhị phân Mỗi phần tử tìm kiếm: bắt đầu tìm kiếm từ nút gốc, sau liệu nhỏ giá trị khóa (key), tìm phần tử bên trái; lớn tìm phần tử bên phải Dưới giải thuật cho nút: struct node* search(int data){ struct node *current = root; printf("Truy cap cac phan tu: "); while(current->data != data){ if(current != NULL) { printf("%d ",current->data); current->rightChild; } //khơng tìm thấy if(current == NULL){ return NULL; } } Hoạt động chèn tìm kiếm nhị phân Mỗi phần tử chèn: cần xác định vị trí xác phần tử Bắt đầu tìm kiếm từ nút gốc, sau liệu nhỏ giá trị khóa (key), tìm kiếm vị trí trống bên trái chèn liệu vào đó; liệu nhỏ tìm kiếm vị trí sống bên phải chèn liệu vào http://vietjack.com/                                                                                                                              Trang  chia  sẻ  các  bài  học  online  miễn  phí     // } ret http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­‐giai-­‐thuat/index.jsp                                                                            Copyright  ©  vietjack.com     void insert(int data){ struct node *tempNode = (struct node*) malloc(sizeof(struct node)); struct node *current; struct node *parent; tempNode->data = data; tempNode->leftChild = NULL; tempNode->rightChild = NULL; //Nếu trống if(root == NULL){ root = tempNode; }else { current = root; parent = NULL; while(1){ parent = current; //tới bên trái if(data < parent->data){ current = current->leftChild; //chèn liệu vào bên trái if(current == NULL){ parent->leftChild = tempNode; return; } }//tới bên phải else{ current = current->rightChild; //chèn liệu vào bên phải if(current == NULL){ parent->rightChild = tempNode; return; } } } } }   http://vietjack.com/                                                                                                                              Trang  chia  sẻ  các  bài  học  online  miễn  phí     ... thuật cho nút: struct node* search(int data){ struct node *current = root; printf("Truy cap cac phan tu: "); while(current->data != data){ if(current != NULL) { printf("%d ",current->data); current->rightChild;

Ngày đăng: 02/12/2017, 13:31

Hình ảnh liên quan

Từ hình ví dụ minh họa trên ta thấy rằng, khóa của nút gốc có giá trị 27 và tất cả khóa bên trái của cây con bên trái đều có giá trị nhỏ hơn 27 này và tất cả các khóa bên phải của cây  con bên phải đều có giá trị lớn hơn 27 - cay tim kiem nhi phan

h.

ình ví dụ minh họa trên ta thấy rằng, khóa của nút gốc có giá trị 27 và tất cả khóa bên trái của cây con bên trái đều có giá trị nhỏ hơn 27 này và tất cả các khóa bên phải của cây con bên phải đều có giá trị lớn hơn 27 Xem tại trang 2 của tài liệu.

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

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

Tài liệu liên quan