二叉搜索树的建树与遍历
Posted 断腿三郎
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉搜索树的建树与遍历相关的知识,希望对你有一定的参考价值。
注意要插入的值,如果等于当前节点,就把它变成当前节点的右儿子
此代码是中南大学暑训入门 B题的AC代码
#include<iostream> #define ll long long using namespace std; struct node { ll data; node * lson; node * rson; }*head; int t; void build(ll x,node *p) { if(p==NULL){ node * pp; pp=new node ; pp->data=x; pp->lson=NULL; pp->rson=NULL; head=pp; return; } if(p->data<=x&&p->rson){build(x,p->rson);} else if(p->data>x&&p->lson){build(x,p->lson);} else if(p->data<=x&&!p->rson){ node * pp; pp=new node ; pp->data=x; pp->lson=NULL; pp->rson=NULL; p->rson=pp; } else if(p->data>x&&!p->lson){ node * pp; pp=new node ; pp->data=x; pp->lson=NULL; pp->rson=NULL; p->lson=pp; } } void preview(node *p) { if(p==NULL){return;} if(t){cout<<" ";} cout<<p->data;t++; preview(p->lson); preview(p->rson); } void midview(node *p) { if(p==NULL){return;} midview(p->lson); if(t)cout<<" "; cout<<p->data;t++; midview(p->rson); } void posview(node *p) { if(p==NULL){return;} posview(p->lson); posview(p->rson); if(t){cout<<" ";} cout<<p->data;t++; } void delet(node *p) { if(p==NULL){return;} delet(p->lson); delet(p->rson); delete p; } int main() { int T; while(cin>>T) while(T--){ int n; ll x; cin>>n; head=NULL; for(int i=0;i<n;i++){ cin>>x; build(x,head); } t=0; preview(head); cout<<endl; t=0; midview(head); cout<<endl; t=0; posview(head); cout<<endl; delet(head); cout<<endl; } }
以上是关于二叉搜索树的建树与遍历的主要内容,如果未能解决你的问题,请参考以下文章
天梯赛练习 L3-010 是否完全二叉搜索树 (30分) 数组建树模拟