/***********************
* @author xiaolin
* @date 2023-3-18
***********************/
#include <iostream>
#include <ctime>
#include <cstdlib>
struct TreeNode
{
int _value;
TreeNode* left;
TreeNode* right;
TreeNode(int value, TreeNode* _left = NULL, TreeNode* _right = NULL):
_value(value), left(_left), right(_right)
{}
};
void insert(TreeNode* &root, int value);
void tdelete(TreeNode* &root, int value);
void Print(TreeNode* root);
//fun 前驱后继 最小值 排名第k节点 ...
const int t_size = 101;
int nums[t_size];
int main()
{
srand((unsigned)time(0));
TreeNode* root = NULL;
std::cout << "随机数: " ;
for(int i=0;i<10;i++){
nums[i] = rand();
std::cout << nums[i] << " ";
insert(root, nums[i]);
}
std::cout << "\n";
Print(root);
std::cout << "\n";
for(int i=0;i<5;i++){
tdelete(root, nums[i]);
}
Print(root);
std::cout << "\n";
return 0;
}
void insert(TreeNode* &root, int value)
{
if(root == NULL){
root = new TreeNode(value, NULL, NULL);
return ;
}
else{
if(value < root->_value){
insert(root->left, value);
}else if(value > root->_value){
insert(root->right, value);
}
}
}
void tdelete(TreeNode* &root, int value)
{
if(root == NULL) return ;
if(root->_value == value){
if(root->left == NULL && root->right == NULL){
delete root;
root = NULL;
}else if(root->left != NULL && root->right == NULL){
TreeNode* temp = root;
root = root->left;
delete temp;
temp = NULL;
}else if(root->left == NULL && root->right != NULL){
TreeNode* temp = root;
root = root->right;
delete temp;
temp = NULL;
}else if(root->left != NULL && root->right != NULL){
TreeNode* temp = root->left;
while(temp->right != NULL){
temp = temp->right;
}
root->_value = temp->_value;
tdelete(root->left, root->_value);
}
}else if(value < root->_value){
tdelete(root->left, value);
}else if(value > root->_value){
tdelete(root->right, value);
}
return ;
}
void Print(TreeNode* root)
{
if(root != NULL){
Print(root->left);
std::cout << root->_value << " " ;
Print(root->right);
}
return ;
}