BST

/***********************
 * @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 ;
}


posted @ 2023-03-18 22:25  小麟qwq  阅读(22)  评论(0)    收藏  举报