二叉查找树
来源:互联网 发布:会锁机的软件下载 编辑:程序博客网 时间:2024/05/01 21:18
//二叉查找树的一些功能#include<iostream>#include<malloc.h>#include<stdio.h>using namespace std;struct Node{ int data; struct Node* left; struct Node* right;};//初始化void Init(Node* Tree){ Tree->data=-1; //设置为-1代表根节点没有值 Tree->left=NULL; Tree->right=NULL;}//插入数据void Insert(Node* Tree,int number){ Node* p=Tree; if(p->data==-1) { p->data=number; return ; } Node* q=(Node*)malloc(sizeof(Node)); //新分配的节点 q->data=number; q->left=q->right=NULL; while(1) { if(p->data>number) { if(p->left==NULL) { p->left=q; return ; } else p=p->left; } else if(p->data<=number) { if(p->right==NULL) { p->right=q; return ; } else p=p->right; } }}//输出所有数据void output(Node* Tree){ Node* p=Tree; if(p->data==-1) { printf("There's no element in this BinarySearchTree.\n"); return ; } if(p->left!=NULL) output(p->left); printf("%d ",p->data); if(p->right!=NULL) output(p->right);}//查找二叉数里面是否有该数字bool Search(Node* Tree,int number){ Node *p=Tree; if(p->data==number) return true; else { if(p->data>number) { if(p->left==NULL) return false; else Search(p->left,number); } else { if(p->right==NULL) return false; else Search(p->right,number); } }}int main(){ freopen("1.txt","r",stdin); int N; scanf("%d",&N); //插入几个数字 Node* Tree; Tree=(Node*)malloc(sizeof(Node)); Init(Tree); for(int i=1;i<=N;++i) { Insert(Tree,i); } output(Tree); printf("\n"); return 0;}
还少一个删除的过程没加上,传递过程中需要传递父节点,子节点,比较麻烦,我想项有没有更加好的方法,后面的平衡二叉树一并写好~~~