BinSearchTree

来源:互联网 发布:淘宝新店上架多少宝贝 编辑:程序博客网 时间:2024/06/02 00:35

 二叉排序树的删除:

http://blog.csdn.net/arcsinsin/article/details/10238505

http://www.cnblogs.com/Lvsi/archive/2011/06/13/2079280.html



# include<iostream># include<queue>using namespace std;typedefstruct BinSearchTree{int data;struct BinSearchTree *left;struct BinSearchTree *right;}btree;//二叉排序树插入void insert(btree *&root,btree *s){if(root==NULL)root=s;else if(root->data==s->data){return;}else if(root->data>s->data){insert(root->left,s);}elseinsert(root->right,s);}void creat(btree *&b){b=NULL;btree *s;while(1){int x;cin>>x;if(x<0)break;s=(btree *)malloc(sizeof(btree));s->data=x;s->left=NULL;s->right=NULL;insert(b,s);}}btree* Search(btree *root,int data){if(root==NULL)return NULL;if(root->data==data)return root;else if(root->data>data)Search(root->left,data);elseSearch(root->right,data);}void Delnode(btree *&root,int data){   btree *s=Search(root,data);   if(s==NULL)   return ;      if(s->left!=NULL)         // 有左子树   {   btree *r=s->left;   btree *pre=s->left;   while(r->right)        // 找左子树中最右边(最大)的节点   {   pre=r;   r=r->right;   }   s->data=r->data;    // 用左子树中最右边的节点的值覆盖要删除的节点      if(pre!=r)  // s  的左子树有右节点   {   pre->right=r->left;   }   else// s 的左子树无 右节点   {   s->left=r->left;   }   free(r);           // 释放节点r      }   else                      // 只有右子树   {   btree *p=s;   s=s->right;   free(p);   p=NULL;   }}void print(btree *root)  // 层序遍历输出{queue<btree *> q1;btree *p;if(root==NULL)return ;q1.push(root);while(!q1.empty()){p=q1.front();q1.pop();cout<<p->data<<" ";if(p->left!=NULL)q1.push(p->left);if(p->right!=NULL)q1.push(p->right);}}

0 0