#include#include #include #include #include #include #include #include #define N 100#define MAXN 0x3f3f3f3fusing namespace std;struct TreeNode{ TreeNode* child[2]; int val; int d;//距离屏幕左端的宽度 TreeNode(){ child[0] = child[1] = NULL; }};int width;int step = 4;void buildT(TreeNode* &t){ int val; cin>>val; if(val == -1){ t = NULL; return; } t = new TreeNode(); t->val = val; buildT(t->child[0]); buildT(t->child[1]);}void widthT(TreeNode* t){ if(!t) return; widthT(t->child[0]); t->d = width; width+=step; widthT(t->child[1]);}void outT(TreeNode* t){ width=0; widthT(t); queue q; vector v; q.push(t); int n=1;//当前层的节点个数 int nn=0;//统计下一次的节点的个数 int pred;//前一个节点距离左屏幕的距离 while(!q.empty()){ TreeNode* tt = q.front(); q.pop(); v.push_back(tt); //放入孩子节点 if(tt->child[0]) q.push(tt->child[0]), ++nn; if(tt->child[1]) q.push(tt->child[1]), ++nn; if(v.size()==n){ //上一层访问完毕 n = nn; nn = 0; /***************************************/ //打印节点的数值 int pred = -1;//前面的节点距离屏幕左端的距离 for(int i=0; i d)<<""; cout< val; pred = x->d; } else { cout< d-pred)< val; pred = x->d; } } cout< child[0]) ld = x->child[0]->d; if(x->child[1]) rd = x->child[1]->d; if(ld != -1) { if(pred==-1){ //打印左孩子的分枝图案 cout< <<""; } else { cout< <<""; } for(int j=0; j d-ld; ++j) cout<<"-"; cout<<"-"; } else { if(pred==-1){ cout< d)<<""; } else { cout< d-pred-1)<<""; } cout<<"-"; } pred = x->d; if(rd != -1){ //打印右孩子的分枝图案 for(int j=0; j d; ++j) cout<<"-"; pred = rd; } } cout< child[0]) ld = x->child[0]->d; if(x->child[1]) rd = x->child[1]->d; if(ld != -1) { if(pred==-1){ cout< <<""; } else { cout< <<""; } cout<<"|"; for(int j=0; j d-ld; ++j) cout<<" "; } else { if(pred==-1){ cout< d)<<""; } else { cout< d-pred-1)<<""; } cout<<" "; } pred = x->d; if(rd != -1){ for(int j=0; j d-1; ++j) cout<<" "; cout<<"|"; pred = rd; } } cout<