C++指针新手,指针BST求条
  • 板块灌水区
  • 楼主Alea
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/9/11 22:35
  • 上次更新2023/11/2 21:15:32
查看原帖
C++指针新手,指针BST求条
322792
Alea楼主2023/9/11 22:35

代码如下:

#include <iostream>
#include <cstring>
using namespace std;
struct node{
    node *ch[2];
    int val,sz,chsz[2];
};
node *root=nullptr;
void insert(int val){
    node *cur=root;
    while(cur!=nullptr){
        cur->sz+=1;
        if(val<cur->val) cur->chsz[0]++,cur=cur->ch[0];
        else cur->chsz[1]++,cur=cur->ch[1];
    }
    cur=new node;
    cur->ch[0]=cur->ch[1]=nullptr;
    cur->val=val,cur->sz=1;
}
void freemem(node *cur){
    if(cur==nullptr) return;
    freemem(cur->ch[0]),freemem(cur->ch[1]);
    delete cur;
}
char canvas[110][220];
void draw(node *cur,int depth,int start){
    if(cur==nullptr) return;
    int cd=depth*2+1;
    canvas[cd][start+cur->chsz[0]]='o';
    draw(cur->ch[0],depth+1,1);
    draw(cur->ch[1],depth+1,start+cur->chsz[0]);
}
void maintain(){
    freemem(root);
    memset(canvas,32,sizeof canvas);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        int v;
        cin>>v;
        insert(v);
    }
    draw(root,1,1);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=2*n+1;j++){
            cout<<canvas[i][j];
        }
        cout<<endl;
    }
}
int main(){
    int _;
    cin>>_;
    while(_--) maintain();
    return 0;
}
2023/9/11 22:35
加载中...