信阳医学院录取分数线:二叉查找树的查找、插入与删除操作。

来源:百度文库 编辑:神马品牌网 时间:2024/04/27 23:53:08
设计算法,实现二叉查找树的查找、插入与删除操作。并用实例测试算法的正确性。

#include "BiSearchTree.h"

  void main(void){
  BiSearchTree<int>searchTree;
  int a[]={18,14,24,5,16,20,38,7,30,10,35},n=11;
  for(int i=0;i<n;i++)
  searchTree.Insert(a[i]);
  searchTree.PrintVTree();
  cout<<endl;
  cout<<"非递归前序遍历:"<<endl;
  searchTree.PreOrder();
  cout<<endl;
  cout<<"非递归后序遍历:"<<endl;
  searchTree.PostOrder();
  cout<<endl;
  cout<<" 删除24";
  searchTree.Delete(a[2]);
  searchTree.PrintVTree();
  cout<<endl;
  }
  //BiSearchTree.h
  #include "LinStack.h"
  #include<math.h>

  struct Info{
  int xIndent;
  int yLevel;
  };
  template<typename T>class BiSearchTree{
  private:
  BiTreeNode<T> *root;
  void PreOrder(BiTreeNode<T> *&t);
  void InOrder(BiTreeNode<T> *&t);
  void PostOrder(BiTreeNode<T> *&t);
  void Insert(BiTreeNode<T> *&ptr,const T &item);
  void Delete(BiTreeNode<T> *&ptr,const T &item);
  void PrintVTree(BiTreeNode<T> *&t);
  public:
  BiSearchTree():root(NULL){};
  ~BiSearchTree(){};

  void PrintVTree(){PrintVTree(root);}
  BiTreeNode<T> *&GetRoot(){return root;}
  void PreOrder(){ PreOrder(root);}
  void PostOrder(){ PostOrder(root);}
  BiTreeNode<T> *&Find(const T &item);
  void Insert(const T &item){
  Insert(GetRoot(),item);}
  void Delete(const T &item){
  Delete(GetRoot(),item);}
  };
  template<typename T>void BiSearchTree<T>::PrintVTree(BiTreeNode<T> *&t){
  int screenWidth=64;
  int dataWidth=2;
  LinQueue<Info> QI;
  LinQueue<BiTreeNode<T>*> Q;
  BiTreeNode<T> *p;
  Info s,s1,s2;
  int offset,level=-1,len,i;
  Q.Insert(t);
  s.xIndent=screenWidth/dataWidth;
  s.yLevel=0;
  QI.Insert(s);
  while(!Q.Empty()&&!QI.Empty())
  {
  s2=s;
  p=Q.Delete();
  s=QI.Delete();
  if(s.yLevel!=level){
  cout<<"\n第"<<s.yLevel<<"层";
  level=s.yLevel;

  提供网站http://www.bc-cn.net/bbs/Article/20054/16/15813.html
  如果有不会的可以问我,小弟对这个略知一,二.

去太平洋软件去看一下吧!!