Untitled
unknown
plain_text
5 years ago
2.3 kB
9
Indexable
//只需繳交public function部分
#include <iostream>
using namespace std;
class TreeNode{
public:
TreeNode(int, TreeNode*, TreeNode*);
void add(TreeNode *);
void PrePrint(); //print in Preorder
void Search(int );
void Delete(int ,TreeNode** );
private:
int value;
TreeNode* left;
TreeNode* right;
};
TreeNode::TreeNode(int v, TreeNode *l, TreeNode *r){
value = v;
left = l;
right = r;
}
void TreeNode::add(TreeNode *ptr){
if( value < ptr->value ){
if(right != NULL){
right->add(ptr);
}else{
right=ptr;
}
}
else if( ptr->value < value ){
if(left != NULL){
left->add(ptr);
}else{
left=ptr;
}
}
}
void TreeNode::PrePrint(){ //print in Preorder
cout<<value<<" ";
if(left!=NULL){
left->PrePrint();
}
if(right!=NULL){
right->PrePrint();
}
}
void TreeNode::Search(int x){
if(value < x){
if(right != NULL){
right->Search(x);
}else{
cout<<"NO"<<endl;
}
}
else if(x < value){
if(left != NULL){
left->Search(x);
}else{
cout<<"NO"<<endl;
}
}
else if(value == x){
cout<<"YES"<<endl;
}
}
void TreeNode::Delete(int x,TreeNode **pre){
//pre 指向此值的pointer
TreeNode *ptr=*pre;
if(value == x){
if( right==NULL && left==NULL ){
*pre = NULL;
}
else if( right==NULL ){
*pre = left;
}
else if( left==NULL ){
*pre = right;
}
else if( right!=NULL && left!=NULL ){
*pre = right;
TreeNode *left_ptr=right;
while( left_ptr->left!=NULL ){
left_ptr = left_ptr->left;
}
if(left_ptr){
left_ptr->left=left;
}
}
delete ptr;
}
else if(value < x){
right->Delete(x,&right);
}
else if(x < value){
left->Delete(x,&left);
}
}
int main(){
char c;
int value=0;
TreeNode *root=NULL;
while(cin>>c){
if(c=='A'){
cin >> value;
TreeNode* node = new TreeNode(value, NULL, NULL);
if(root == NULL){
root=node;
}else{
root->add(node);
}
}
else if(c=='S'){
cin>>value;
root->Search(value);
}
else if(c=='D'){
cin>>value;
root->Delete(value,&root);
if(root==NULL)
cout<<"wrong"<<endl;
}
else if(c=='P'){
root->PrePrint();
cout<<endl;
}
else if(c=='E'){
break;
}
}
} Editor is loading...