二叉树
#include "iostream.h"
struct node
{
int key_value;
node *left;
node *right;
};
class btree
{
public:
node *root;
btree();
~btree();
void destroy_tree(node *leaf);
void insert(int key, node *leaf);
node *search(int key, node *leaf);
void insert(int key);
node *search(int key);
void destroy_tree();
void fview(node *r);
void lview(node *r);
void mview(node *r);
};
btree::btree()
{
root=NULL;
}
btree::~btree()
{
destroy_tree();
}
void btree::destroy_tree(node *leaf)
{
if(leaf!=NULL)
{
destroy_tree(leaf->left);
destroy_tree(leaf->right);
delete leaf;
}
}
void btree::insert(int key, node *leaf)
{
if(key< leaf->key_value)
{
if(leaf->left!=NULL)
insert(key, leaf->left);
else
{
leaf->left=new node;
leaf->left->key_value=key;
leaf->left->left=NULL; //Sets the left child of the child node to null
leaf->left->right=NULL; //Sets the right child of the child node to null
}
}
else if(key>=leaf->key_value)
{
if(leaf->right!=NULL)
insert(key, leaf->right);
else
{
leaf->right=new node;
leaf->right->key_value=key;
leaf->right->left=NULL; //Sets the left child of the child node to null
leaf->right->right=NULL; //Sets the right child of the child node to null
}
}
}
node *btree::search(int key, node *leaf)
{
if(leaf!=NULL)
{
if(key==leaf->key_value)
{
cout<<"Find!"<<endl;
return leaf;
}
if(key<leaf->key_value)
return search(key, leaf->left);
else
return search(key, leaf->right);
}
else
{
cout<<"Not Found!"<<endl;
return NULL;
}
}
void btree::insert(int key)
{
if(root!=NULL)
insert(key, root);
else
{
root=new node;
root->key_value=key;
root->left=NULL;
root->right=NULL;
}
}
node *btree::search(int key)
{
return search(key, root);
}
void btree::destroy_tree()
{
destroy_tree(root);
}
void btree::fview(node *r)//先序遍历
{
if(r!=NULL)
{
cout<<r->key_value<<"->";
fview(r->left);
fview(r->right);
}
}
void btree::lview(node *r)//后序遍历
{
if(r!=NULL)
{
lview(r->left);
lview(r->right);
cout<<r->key_value<<"->";
}
}
void btree::mview(node *r)//中序遍历
{
if(r!=NULL)
{
mview(r->left);
cout<<r->key_value<<"->";
mview(r->right);
}
}
int main(int argc, char* argv[])
{
btree b1;
b1.root=new node();
b1.root->key_value=10;
b1.root->left=NULL;
b1.root->right=NULL;
int a[6]={6,14,5,8,11,18};
for(int i=0;i<6;i++)
{
b1.insert(a[i],b1.root);
}
cout<<"先序遍历:"<<endl;
b1.fview(b1.root);
cout<<endl;
cout<<"后序遍历:"<<endl;
b1.lview(b1.root);
cout<<endl;
cout<<"中序遍历:"<<endl;
b1.mview(b1.root);
cout<<endl;
cout<<"你需要找的节点值为:";
int x;
cin>>x;
node* fnode;
fnode=b1.search(x);
return 0;
}
下面是上面程序的二叉树:

浙公网安备 33010602011771号