Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 3 của 3

Chủ đề: binary search tree.

  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi kangoo1707
    Mã:
    случае, у удаленного узла иммет только одна потомка
    Oa, làm sao hay vậy, bạn dùng IDE nào mà gõ dc tiếng Nga vậy, chắc ko phải Bòland hay Tubò gòy
    Mình dùng netbeans, compiler la g++.

  3. #3

    binary search tree.

    Chào các bác, em có viết 1 đoạn code để mô tả lại các method (search, insert, visit, delete) của cây tìm kiếm nhị phân. Riêng hàm delete em còn bị lỗi mà chưa biết cách sữa. Mong các bác giúp đỡ.
    Đây là code của em:
    Mã nguồn PHP:
    #include <iostream>#include <stdlib.h>struct tnode { int value; tnode* left; tnode* right; tnode() { left == NULL; right == NULL; }};void visitTree(tnode*);bool search_bst(tnode* rootTree, int searcher) { if (rootTree == NULL) { return false; } else if (rootTree->value > searcher) { return search_bst(rootTree->left, searcher); } else if (rootTree->value < searcher) { return search_bst(rootTree->right, searcher); } else if (rootTree->value == searcher) { return true; }}void insertNode(tnode*& rootTree, tnode* newNode) { if (rootTree == NULL) { rootTree = newNode; } else if (rootTree->value > newNode->value) { insertNode(rootTree->left, newNode); } else { insertNode(rootTree->right, newNode); }}void deleteNode(tnode*& rootTree, int deleteKey) { tnode** delNode = &rootTree; if (!search_bst(rootTree, deleteKey)) { exit(0); } // поиск удаленный узел while ((*delNode)->value != deleteKey) { if ((*delNode)->value < deleteKey) { delNode = &((*delNode)->right); } else if ((*delNode)->value > deleteKey) { (*delNode) = (*delNode)->left; } } std::cout<<(*delNode)->left<<std::endl; std::cout<<(*delNode)->right<<std::endl; if ((*delNode)->left == NULL && (*delNode)->right == NULL) { (*delNode) = NULL; } else if ((*delNode)->left == NULL) { // В случае, у удаленного узла иммет только одна потомка delNode = &((*delNode)->right); } else if ((*delNode)->right == NULL) { delNode = &((*delNode)->left); } else { tnode** leftOfDelNode = &(*delNode)->left; // поиск the most right node of left tree, which root now is deleted node while((*leftOfDelNode)->right != NULL) { leftOfDelNode = &((*leftOfDelNode)->right); } (*delNode)->value = (*leftOfDelNode)->value; deleteNode(rootTree, (*leftOfDelNode)->value); }}void visitTree(tnode* rootTree) { if(rootTree == NULL) { std::cout<<"NIL"<<std::endl; } else { std::cout<<rootTree->value<<" "; visitTree(rootTree->left); visitTree(rootTree->right); }}int main() { tnode* rootTree; tnode* right; tnode* left; right = new tnode; right->value = 12; left = new tnode; left->value = 8; tnode* l = new tnode; l->value = 6; rootTree = new tnode; rootTree->value = 10; insertNode(rootTree, right); insertNode(rootTree, left); insertNode(rootTree, l); //tnode* delNode = search_bst(rootTree, 8); //std::cout<<delNode->value; deleteNode(rootTree, 8); visitTree(rootTree); delete right; delete left; delete l; delete rootTree; return 0;}  

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •