2 85Winter 2014 (C) Nguyen Tri Tuan DH KHTN Tp HCM Cây nhị phân � Các khái niệm và thuật ngữ cơ bản � Cài đặt cấu trúc dữ liệu � Duyệt cây � Cây nhị phân tìm kiếm – Binary Search Tree � Hàng đợi ưu ti[.]
Cây nhị phân Các khái niệm thuật ngữ Cài đặt cấu trúc liệu Duyệt Cây nhị phân tìm kiếm – Binary Search Tree Hàng đợi ưu tiên – Priority Queue Winter 2014 85 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM Cây nhị phân tìm kiếm (BST) Ý nghĩa BST Binary Search Tree ADT Cài đặt cấu trúc liệu BST Đánh giá/So sánh Bài tập Winter 2014 86 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM Ý nghĩa BST (1) Tìm phần tử nhị phân ? Thuật toán ? Chi phí ? Winter 2014 87 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM Ý nghĩa BST (2) Điểm yếu điểm mạnh mảng ? Điểm yếu điểm mạnh danh sách liên kết ? Một cấu trúc liệu có điểm mạnh mảng danh sách liên kết ? Winter 2014 88 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM Binary Search Tree ADT (1) Cây nhị phân tìm kiếm là: Một nhị phân Mỗi node có khóa (key) Mỗi node p thỏa: • Tất node thuộc trái có khóa nhỏ khóa p ∀q ∈ p->left: q->key < p->key • Tất node thuộc phải có khóa lớn khóa p ∀q ∈ p->right: q->key > p->key Winter 2014 89 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM Binary Search Tree ADT (2) Winter 2014 90 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM Binary Search Tree ADT (3) Winter 2014 91 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM Binary Search Tree ADT (4) Các thao tác bản: Khởi tạo rỗng Xóa Thêm node Xóa node Tìm node Duyệt Kiểm tra rỗng Đếm số node Tính chiều cao Winter 2014 92 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM Cài đặt cấu trúc liệu BST (1) template class BSTNode public: T key; BSTNode *left; BSTNode *right; { // key of node // pointer to left child // pointer to right child BSTNode() { } BSTNode(T aKey) { key = aKey; left = right = NULL; } }; // end class Winter 2014 93/203 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM Cài đặt cấu trúc liệu BST (2) template class BINARY_SEARCH_TREE { private: BSTNode *root; // pointer to root of tree bool insertNode(BSTNode *&p, T newKey); bool removeNode(BSTNode *&p, T aKey); int countNode(BSTNode *p); int height(BSTNode *p); void LNR(BSTNode *p); void NLR(BSTNode *p); void LRN(BSTNode *p); public: BINARY_SEARCH_TREE(); // default constructor BINARY_SEARCH_TREE(const BINARY_SEARCH_TREE &aTree);// copy constructor ~BINARY_SEARCH_TREE(); // destructor // operations bool insert(T newKey); bool remove(T aKey); BSTNode*findNode(T aKey); bool isEmpty(); int countNode(); int height(); void preorder(); void inorder(); void postorder(); }; // end class Winter 2014 // add new node with ‘newKey’ // find and remove node with ‘aKey’ // find node with ‘aKey’ // // // // // 94 call call call call call countNode(root) height(root) NLR(root) LNR(root) LRN(root) (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM .. .Cây nhị phân tìm kiếm (BST) Ý nghĩa BST Binary Search Tree ADT Cài đặt cấu trúc liệu BST Đánh giá/So sánh Bài tập Winter 2014 86 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM Ý nghĩa BST (1) Tìm... cấu trúc liệu BST (1) template class BSTNode public: T key; BSTNode *left; BSTNode *right; { // key of node // pointer to left child // pointer to right child BSTNode() { } BSTNode(T aKey)... Winter 2014 88 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM Binary Search Tree ADT (1) Cây nhị phân tìm kiếm là: Một nhị phân Mỗi node có khóa (key) Mỗi node p thỏa: • Tất node thuộc trái có khóa nhỏ