#include<iostream>
struct searchBinaryTreeNode {
int data;
struct searchBinaryTreeNode* leftchild;
struct searchBinaryTreeNode* rightchild;
};
bool searchTreeNode(struct searchBinaryTreeNode* tree, int x) {
if (tree == nullptr) {
return false;
}
if (tree->data == x) {
return true;
}
if (x > tree->data) {
searchTreeNode(tree->rightchild, x);
}
if (x < tree->data) {
searchTreeNode(tree->leftchild, x);
}
return true;
}
struct searchBinaryTreeNode* insertTreeNode(struct searchBinaryTreeNode* tree, int x) {
if (tree == nullptr) {
struct searchBinaryTreeNode* tree = new searchBinaryTreeNode;
tree->data = x;
tree->leftchild = tree->rightchild = nullptr;
return tree;
}
if (x == tree->data) {
return tree;
}
if (x > tree->data) {
insertTreeNode(tree->rightchild, x);
}
if (x < tree->data) {
insertTreeNode(tree->leftchild, x);
}
return tree;
}
bool deleteTreeNode(struct searchBinaryTreeNode* tree, int x) {
struct searchBinaryTreeNode* ptree = tree;
struct searchBinaryTreeNode* ftree = nullptr;
struct searchBinaryTreeNode* qtree;
struct searchBinaryTreeNode* stree;
if (tree == nullptr) {
return false;
}
while (ptree) {
if (ptree->data == x) {
ftree = ptree;
}
if (x < ptree->data) {
ptree = ptree->leftchild;
}
if (x > ptree->data) {
ptree = ptree->rightchild;
}
}
if (ptree == nullptr) {
return false;
}
if (ptree->leftchild && ptree->rightchild) {
qtree = ptree;
stree = ptree->leftchild;
while (stree->rightchild) {
qtree = stree;
stree = stree->rightchild;
}
qtree->data = stree->data;
if (qtree != ptree) {
qtree->rightchild = stree->leftchild;
}
else {
qtree->leftchild = stree->leftchild;
}
free(stree);
}
else {
if (ptree->leftchild) {
qtree = ptree;
ptree = ptree->leftchild;
}
if (ptree->rightchild) {
qtree = ptree;
qtree = ptree->rightchild;
}
if (ftree == nullptr) {
tree = ptree;
}
if (qtree = ftree->leftchild) {
ftree->rightchild = ptree;
}
else {
ftree->rightchild = ptree;
}
free(qtree);
}
return true;
}
int main() {
return 0;
}
数据结构与算法-二叉查找树
于 2022-07-15 20:19:16 首次发布