#include<iostream>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<string.h>
//const MAX=50;
using namespace std; struct BitreeNode{
//int num=1;
int data;
BitreeNode *lchild;
BitreeNode *rchild;
};
typedef struct BitreeNode *Bitree;
//typedef t p; bool Delete(Bitree *t); void pre_order(BitreeNode *t)//
{
if(t==NULL)
{
return ;
} cout<<t->data<<" "; pre_order(t->lchild);
pre_order(t->rchild); return;
} void in_order(BitreeNode *t)//
{
if(t==NULL)
{
return;
}
in_order(t->lchild);
cout<<t->data<<" ";
in_order(t->rchild); return;
} void insert_tree(int data,BitreeNode *&t)//二查搜索树的建立
{
if(t==NULL)//
{
t=new BitreeNode;
t->data=data;
//strcpy(t->data,data);
t->lchild=NULL;
t->rchild=NULL; return;
} if( (t->data)<data )
{
insert_tree(data,t->rchild);
} if( (t->data)>data )
{
insert_tree(data,t->lchild);
} return;
} Bitree foundNode(int x,Bitree t)//寻找结点 //返回该结点的地址
{
if(t==NULL)
{
cout<<"No Found!";
return NULL;
} if(x>(t->data))
{
return foundNode(x,t->rchild);
} if(x<(t->data))
{
return foundNode(x,t->lchild);
} if(x==(t->data))
{
//cout<<x;
//t=NULL; //---
///delete t; //---- return t;
} //return;
} int deletemin(Bitree t)//删除最小的结点
{
if(t==NULL)
{
cout<<"空树";
return -1;
} if(t->lchild==NULL)//根节点左空
{
cout<<"最小的结点是根节点无法删除:"<<t->data<<endl; return -1;
} if((t->lchild->lchild)==NULL)
{
//cout<<t->lchild->data<<endl;
//delete t->lchild; //删除
//t->lchild=NULL;
int a=t->lchild->data;//封装最小结点
t->lchild=t->lchild->rchild;//删除最小结点 return a;
} return deletemin(t->lchild); //return;
} bool deleteBST(int x,Bitree *t)//删除某个结点
{ if((*t)==NULL)
{
return 0;
} if((*t)->data>x)//x小于当前
{
return deleteBST(x,&(*t)->lchild);
} if((*t)->data<x)//x大于当前
{
return deleteBST(x,&(*t)->rchild);
} if((*t)->data==x)//x等于于当前
{
return Delete(t);
} } bool Delete(Bitree *t)//给入要删除的结点t的指针
{
Bitree q,s; if((*t)->lchild==NULL)//左空
{
q=*t;
(*t)=(*t)->rchild;
delete (q); return 1;
} if((*t)->rchild==NULL)//右空
{
q=*t;
(*t)=(*t)->lchild;
delete (q); return 1;
} q=*t ; s=(*t)->lchild;
while(s->rchild!=NULL)
{
q=s;
s=s->rchild;
} (*t)->data=s->data; if(q!=*t)
{
q->rchild=s->lchild;
}
else
{
q->lchild=s->lchild;
} return 1; } //bool Delete() int main()
{
freopen("bin.txt","r",stdin);
//int j=0;
//CreateTree(T);
//j=rand()%10;//
//pre_order(T);
//cout<<"\n";
//in_order(T);
//char st[MAX];
//F=foundNode(18,T);
//cout<<F->data;
//cout<<deletemin(T->rchild->rchild);
//in_order(T); BitreeNode *T=NULL;//*F=NULL;//
int num=0; for(int i=1;i<=12;i++)
{
//gets(st);
cin>>num;
insert_tree(num,T);
} deleteBST(12,&T);
in_order(T); return 0;
}

  

BST的删除的更多相关文章

  1. 二叉排序树(BST)创建,删除,查找操作

    binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...

  2. 第七章 二叉搜索树(b3)BST:删除

  3. BST树

    http://www.cnblogs.com/bizhu/archive/2012/08/19/2646328.html 4. 二叉查找树(BST) Technorati 标记: 二叉查找树,BST, ...

  4. bst 二叉搜索树简单实现

    //数组实现二叉树: // 1.下标为零的元素为根节点,没有父节点 // 2.节点i的左儿子是2*i+1:右儿子2*i+2:父节点(i-1)/2: // 3.下标i为奇数则该节点有有兄弟,否则又左兄弟 ...

  5. 用 C++ 标准模板库(STL)的 vector 实现二叉搜索树(BST)

    本文由 Justme0翻译自 Code Project 转载请参见文章末尾处的要求. 介绍 众所周知,要建一棵树,我们需要关注它的内存分配与释放.为了避开这个问题,我打算用C++ STL(vector ...

  6. BST 二叉搜索树

    定义: 二叉查找树要么是一棵空树,要么是一棵具有如下性质的非空二叉树:      1.若左子树非空,则左子树上的所有结点的关键字值均小于根结点的关键字值.      2.若右子树非空,则右子树上的所有 ...

  7. 树:BST、AVL、红黑树、B树、B+树

    我们这个专题介绍的动态查找树主要有: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree).这四种树都具备下面几个优势: (1) 都是动态结构.在删除,插入操 ...

  8. [算法专题] BST&AVL&RB-Tree

    BST 以下BST的定义来自于Wikipedia: Binary Search Tree, is a node-based binary tree data structure which has t ...

  9. 二叉查找树(BST)

    二叉查找树(BST) 二叉查找树(Binary Search Tree)又叫二叉排序树(Binary Sort Tree),它是一种数据结构,支持多种动态集合操作,如 Search.Insert.De ...

随机推荐

  1. 你知道为什么Xcode6中Swift没有智能提示和自己主动补全功能吗 ?

    你知道为什么Xcode6中Swift没有智能提示和自己主动补全功能吗 ? 长沙戴维营教育将为你解开这个巨大的谜团大BUG! http://www.ubuntucollege.cn/course/29/ ...

  2. 存储和读取MYSQL时间戳

    from_unixtime(date,'%Y%m%d')是MySQL里的时间函数date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串后面的 '%Y%m ...

  3. VS单元测试入门实践教程

    摘要:本教程不会介绍单元测试的基本理论知识,也不会和大家讨论在实际项目中是否需要写单元测试代码的问题.但是如果你此时想使用VS中的单元测试的工具来测试某个方法是否正确,可你又从来没真正实践过,那么本教 ...

  4. Qt标题栏图标和运行程序图标设置

    一.标题栏图标 1.*.qrc资源文件中添加图片 2.添加代码 setWindowIcon(QIcon(":/images/paste.png")); //设置窗口上的图标,需要在 ...

  5. JAVA 8 新特性和改进

    Java 8的所有新特性及改进包括(JEP全称为JDK Enhancement Proposal,JDK改进建议): 语言改进: JEP 126:Lambda表达式 & 虚拟扩展方法 JEP ...

  6. 星际争霸反作弊AG对战平台_支持108,113

    星际争霸反作弊AG对战平台_支持108,113,116 强大的星际反作弊功能,对战神器,让玩家公平对战 目前腾讯对战,浩方对战,VS对战平台都有星际外挂,AG平台什么都不干专门反外挂,希望热爱星际的玩 ...

  7. C的陷阱和缺陷研读笔记01

    词法分析: 编译器将程序分解成符号的方法是 从左到右一个一个字符的读入,如果该字符可能组成一个符号,再读入下一个字符 而c语言里的符号 / * =只有一个字符长, 是单字符的, /* == 一些事双字 ...

  8. 解除被DenyHosts锁定的IP地址

    自己的本本无法ssh上服务器,提示 ssh_exchange_identification: read: Connection reset by peer 仔细回想,自己手贱把~下面的一个ssh文件删 ...

  9. RMSE、RMS、标准差

    1.均方根误差,它是观测值与真值偏差的平方和观测次数n比值的平方根,在实际测量中,观测次数n总是有限的,真值只能用最可信赖(最佳)值来代替.方根误差对一组测量中的特大或特小误差反映非常敏感,所以,均方 ...

  10. 论山寨手机与Android联姻 【9】SmartPhone的硬件结构

    如何区别智能手机(SmartPhone)与功能手机(FeaturePhone)? 有一种观点认为,智能手机本质上是功能手机与便携式电脑(Laptop PC)的结合.功能手机的功能受限于制造厂商的预制, ...