C/C++ 中二叉排序树 的操作
来源:互联网 发布:升级数据 日月 编辑:程序博客网 时间:2024/05/16 05:04
#include<stdio.h>#include<iostream>using namespace std;typedef struct Node{int data;struct Node *lchild;struct Node *rchild;}Node,*pNode;void create(pNode &tree,int data){pNode ptr;if(data == -1){return;}if(tree == NULL){tree = (pNode)malloc(sizeof(Node));if(tree!=NULL){tree->data = data;tree->lchild = NULL;tree->rchild = NULL;}return ;}if(tree->data>=data){if(tree->lchild == NULL){ptr = (pNode)malloc(sizeof(Node));if(ptr!=NULL){ptr->data = data;ptr->lchild = NULL;ptr->rchild = NULL;}tree->lchild = ptr;}else{create(tree->lchild,data);}}if(tree->data<data){ if(tree->rchild == NULL){ptr = (pNode)malloc(sizeof(Node));if(ptr!=NULL){ptr->data = data;ptr->lchild = NULL;ptr->rchild = NULL;}tree->rchild = ptr;}else{create(tree->rchild,data);}}}void inorderTravel(pNode tree){if(tree){ inorderTravel(tree->lchild);printf("%d ",tree->data);inorderTravel(tree->rchild);}}void preTravel(pNode tree){if(tree){printf("%d ",tree->data);preTravel(tree->lchild);preTravel(tree->rchild);}}void postTravel(pNode tree){if(tree){postTravel(tree->lchild);postTravel(tree->rchild);printf("%d ",tree->data);}}void DeleteNode(pNode &tree){pNode ptr;ptr = tree;//如果右子树为空,左子树为空if(ptr->rchild == NULL &&ptr->lchild==NULL){free(ptr);tree = NULL;}else if(ptr->rchild == NULL&&ptr->lchild!=NULL){//找到前继节点ptr->data = ptr->lchild->data;DeleteNode(ptr->lchild);}else if(ptr->rchild != NULL&&ptr->lchild==NULL){ptr->data = ptr->rchild->data;DeleteNode(ptr->rchild);}else {ptr->data = ptr->lchild->data;DeleteNode(ptr->lchild);}}void deleteData(pNode &tree,int data){if(!tree){return ;}if(data == tree->data){return DeleteNode(tree);}else if(data < tree->data){return deleteData(tree->lchild,data);}else {return deleteData(tree->rchild,data);}}int main(void){pNode ptree = NULL;pNode ptr = NULL;int data = -2;int i=0;cin>>data;while(data!=-1){create(ptree,data);cin>>data;}preTravel(ptree);cout<<endl;inorderTravel(ptree);cout<<endl;postTravel(ptree);cout<<endl;data = -2;while(1){ cin>>data;if(data==-1){break;}deleteData(ptree,data);inorderTravel(ptree);cout<<endl;}getchar();}
0 0
- C/C++ 中二叉排序树 的操作
- 二叉排序树的操作(C语言)
- C语言实现二叉排序树的相关操作
- 二叉排序树与文件的操作(C、C++)
- 二叉排序树的C代码
- 二叉排序树的建立以及相关操作 C语言
- C语言实现二叉排序树的增删查操作
- 二叉排序树(c++)
- 二叉排序树 c
- 二叉排序树的实现(C#)
- c语言:二叉排序树的实现
- C语言二叉排序树的实现
- C语言二叉排序树的创建
- 查找二叉排序树中最大的键值(c代码)
- 二叉排序树的查找与遍历C版
- C/C++二叉排序树
- c/c++二叉排序树
- c版二叉排序树
- 以Gzip的形式通过服务器向客户端发送数据
- SAP Ehancement Package 7 for ERP 6.0 Install Step By Step -03
- 可对角化的n阶实矩阵P的q次幂
- C++语法:
- NYOJ 497 排队打饭
- C/C++ 中二叉排序树 的操作
- hdu 1247~~字典树
- 移动平台商家支付宝攻略 商户私钥生成
- 34张让你瞠目结舌的真实照片
- Ubuntu中软件的基本安装和卸载,以及WINE的使用
- Android学习之BroadCastReceiver的机制
- windows api打开文件对话框
- Java构造方法
- WIN下编译OPENSSL