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;}
Pallet nhựa Lâm Đồng giải pháp hoàn hảo cho nhà kho Pallet nhựa Lâm Đồng là một giải pháp đa năng và hiệu quả trong việc vận chuyển và lưu trữ hàng hóa. Trong đó, pallet nhựa Lâm Đồng không chỉ đáp...
Pallet nhựa Lâm Đồng giải pháp...