#include <iostream> using namespace std; typedef struct BiTNode{ int data; struct BiTNode *lchild, *rchild; }BiTNode,*BiTree; class solution{ public: bool searchBst(BiTree root, int key, BiTree f, BiTree *p) { if (!root) { *p = f; return false; } else if (root->data == key) { *p = root; return true; } else if (key < root->data) { searchBst(root->lchild, key, root, p); } else { searchBst(root->rchild, key, root, p); } } bool insertNode(BiTree *root,int key) { BiTree p; if (!searchBst(*root, key, NULL, &p)) { BiTNode* s = new BiTNode; s->data = key; s->lchild = s->rchild = NULL; if (!p) { *root = s; } else if (key < p->data) { p->lchild = s; } else { p->rchild = s; } return true; } else { return false; } } void printTree(BiTree root) { if (root == NULL) return; printTree(root->lchild); cout << root->data << " "; printTree(root->rchild); } BiTNode* maxValue(BiTree root) { if (!root) return NULL; BiTNode* s = root; while (s->rchild) { s = s->rchild; } return s; } BiTNode* minValue(BiTree root) { if (!root) return NULL; BiTNode* s = root; while (s->lchild) { s = s->lchild; } return s; } bool Delete(BiTree* p) { BiTree q,s; if ((*p)->lchild == NULL) { BiTree q = *p; *p = (*p)->rchild; delete q; } else if ((*p)->rchild == NULL) { BiTree q = *p; *p = (*p)->lchild; delete q; } else { s = (*p)->lchild; q = *p; while (s->rchild) { q = s; s = s->rchild; } (*p)->data = s->data; if (*p == q) { q->lchild = s->lchild; } else { q->rchild = s->lchild; } delete s; } return true; } bool DeleteBST(BiTree* root, int key) { if (!root && !(*root)) return false; else { if (key == (*root)->data) Delete(root); else if (key < (*root)->data) return DeleteBST(&((*root)->lchild), key); else return DeleteBST(&((*root)->rchild), key); } } }; int main() { solution s; BiTree root=NULL; int a[10] = { 6, 4, 8, 5, 0, 9, 3, 7, 1, 2 }; for (int i = 0; i < 10; ++i) { s.insertNode(&root, a[i]); } cout << "前序遍历结果:" << endl; s.printTree(root); cout << endl; cout << "最大值:" << endl; cout << (s.maxValue(root))->data << endl; cout << "最小值:" << endl; cout << (s.minValue(root))->data << endl; cout << "查找值为'3'的结点:" << endl; BiTree p; cout << (s.searchBst(root, 3, NULL, &p) ? "exist" : "no exist" )<< endl; cout << (s.searchBst(root, 8, NULL, &p) ? "exist" : "no exist") << endl; cout << (s.searchBst(root, 13, NULL, &p) ? "exist" : "no exist") << endl; cout << "删除值为3的结点:" << endl; s.DeleteBST(&root, 3); s.printTree(root); cout << endl; return 0; }