#include <iostream>
using namespace std;
typedef struct Node{
int val;
Node *left;
Node *right;
}Node,*PNode;
void insert(PNode &p,int key){
if(p == NULL){
p = new Node;
p->val = key;
p->left = NULL;
p->right = NULL;
return;
}
if(key == p->val){
cout << "insert error is equal" << endl;
}
if(key > p->val){
insert(p->right,key);
}else{
insert(p->left,key);
}
}
PNode deleteNode(PNode p){
if(p->left != NULL){
PNode r = p->left;
while(r->right != NULL){
r = r->right;
}
r->right = p->right;
r = p->left;
delete p;
return r;
}else{
PNode r = p->right;
delete p;
return r;
}
}
void delete_order(PNode &p,int key){
if(p == NULL){
return ;
}
if(p->val == key){
p = deleteNode(p);
}else{
if(p->val > key){
delete_order(p->left,key);
}else{
delete_order(p->right,key);
}
}
}
void pre_order(PNode p){
if(p == NULL){
return ;
}
cout << p->val << endl;
pre_order(p->left);
pre_order(p->right);
}
void in_order(PNode p){
if(p == NULL){
return ;
}
in_order(p->left);
cout << p->val << endl;
in_order(p->right);
}
void post_order(PNode p){
if(p == NULL){
return ;
}
post_order(p->left);
post_order(p->right);
cout << p->val << endl;
}
bool find(PNode p,int key){
if(p == NULL){
return false;
}
if(p->val == key){
return true;
}
if(p->val > key){
find(p->left,key);
}else{
find(p->right,key);
}
}
void freeNode(PNode p){
if(p == NULL){
return ;
}
if(p->left != NULL){
freeNode(p->left);
}
if(p->right != NULL){
freeNode(p->right);
}
delete p;
}
int main()
{
PNode p = NULL;
int a[] = {10,8,12,7,9,11};
for(int i=0;i<sizeof(a)/sizeof(int);i++){
//cout << a[i] << endl;
insert(p,a[i]);
}
//delete_order(p,11);
//pre(p);
in_order(p);
//post_order(p);
if(find(p,100)){
cout << "find " << endl;
}else{
cout << "not find" << endl;
}
freeNode(p);
return 0;
}
using namespace std;
typedef struct Node{
int val;
Node *left;
Node *right;
}Node,*PNode;
void insert(PNode &p,int key){
if(p == NULL){
p = new Node;
p->val = key;
p->left = NULL;
p->right = NULL;
return;
}
if(key == p->val){
cout << "insert error is equal" << endl;
}
if(key > p->val){
insert(p->right,key);
}else{
insert(p->left,key);
}
}
PNode deleteNode(PNode p){
if(p->left != NULL){
PNode r = p->left;
while(r->right != NULL){
r = r->right;
}
r->right = p->right;
r = p->left;
delete p;
return r;
}else{
PNode r = p->right;
delete p;
return r;
}
}
void delete_order(PNode &p,int key){
if(p == NULL){
return ;
}
if(p->val == key){
p = deleteNode(p);
}else{
if(p->val > key){
delete_order(p->left,key);
}else{
delete_order(p->right,key);
}
}
}
void pre_order(PNode p){
if(p == NULL){
return ;
}
cout << p->val << endl;
pre_order(p->left);
pre_order(p->right);
}
void in_order(PNode p){
if(p == NULL){
return ;
}
in_order(p->left);
cout << p->val << endl;
in_order(p->right);
}
void post_order(PNode p){
if(p == NULL){
return ;
}
post_order(p->left);
post_order(p->right);
cout << p->val << endl;
}
bool find(PNode p,int key){
if(p == NULL){
return false;
}
if(p->val == key){
return true;
}
if(p->val > key){
find(p->left,key);
}else{
find(p->right,key);
}
}
void freeNode(PNode p){
if(p == NULL){
return ;
}
if(p->left != NULL){
freeNode(p->left);
}
if(p->right != NULL){
freeNode(p->right);
}
delete p;
}
int main()
{
PNode p = NULL;
int a[] = {10,8,12,7,9,11};
for(int i=0;i<sizeof(a)/sizeof(int);i++){
//cout << a[i] << endl;
insert(p,a[i]);
}
//delete_order(p,11);
//pre(p);
in_order(p);
//post_order(p);
if(find(p,100)){
cout << "find " << endl;
}else{
cout << "not find" << endl;
}
freeNode(p);
return 0;
}