二叉搜索树
二叉搜索树是指在插入数据的时候,与根节点比较,大小有序的进入树中找的位置并储存。
实现方法
数据进入树中,与树的根节点比较,大的话放在左边(右边),小的话放在右边(左边)。
#include <iostream> #include <vector> using namespace std; typedef struct Std { int iNum; struct Std *left; struct Std *right; }Tree; vector<vector<int> > prder;//用于层次遍历 //一,创建空树树 Tree* CreateTree(int iNumroot); //二,插入数据 void InsertTree(Tree* Head,int n); //三,删除节点 Tree* Delete(Tree* Head,int n); //四,层次遍历 vector<vector<int> > Layer_Tree(Tree* Head); void layertree(Tree* Head,int n); //四.2,输出数据 void Point(); int main () { Tree* root; int iNumroot; int iNumber; //输入树根 cout<<"输入树根:"<<endl; cin>>iNumroot; root=CreateTree(iNumroot); //输入数据的个数 cout<<"输入数据个数:"<<endl; cin>>iNumber; cout<<"输入数据:"; for(int i=0;i<iNumber;i++) { int a; cin>>a; InsertTree(root,a); } //删除节点 cout<<"输入要删除的节点:"; int m; cin>>m; root=Delete(root,m); //层次输出数据 prder=Layer_Tree(root); Point(); return 0; } Tree* CreateTree(int iNumroot) { Tree* Head; Head=new Tree; (*Head).iNum=iNumroot; Head->left=NULL; Head->right=NULL; return Head; } void InsertTree(Tree* Head,int n) { if(n>Head->iNum) { if(Head->right) { InsertTree(Head->right,n); } else { Tree* New=new Tree; (*New).iNum=n; New->left=NULL; New->right=NULL; Head->right=New; return; } } else { if(Head->left) { InsertTree(Head->left,n); } else { Tree* New=new Tree; (*New).iNum=n; New->left=NULL; New->right=NULL; Head->left=New; return; } } } vector<vector<int> > Layer_Tree(Tree* Head) { if(!Head) return prder; layertree(Head,0); return prder; } Tree* Delete(Tree* Head,int n) { if(!Head) { cout<<"删除的节点不存在!"<<endl; } if(n==Head->iNum) { if(Head->left&&Head->right) { Tree* cur=Head->right; while(cur->iNum!=NULL) { cur=cur->left; } Head->iNum=cur->iNum; Head->right=Delete(Head->right,cur->iNum); } else if(!Head->left&&!Head->right) { return NULL; } else { Head=(Head->left==NULL)?Head->right:Head->left; } } else if(n>Head->iNum) { Head->right=Delete(Head->right,n); } else { Head->left=Delete(Head->left,n); } return Head; } void layertree(Tree* Head,int n) { if(!Head) return; if(n>=prder.size()) { vector<int> x; prder.push_back(x); } prder[n].push_back(Head->iNum); layertree(Head->left,n+1); layertree(Head->right,n+1); } void Point() { for(int i=0;i<prder.size();i++) { if(prder[i].empty()) { cout<<"N"<<" "; } for(int j=0;j<prder[i].size();j++) { cout<<prder[i][j]<<" "; } cout<<endl; } }