二叉树

#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;
}
下面是上面程序的二叉树:


posted @ 2005-01-24 00:05  小白天地  阅读(619)  评论(0)    收藏  举报