xj13821328013的博客

一只菜鸟的成长历程

NYOJ 1063 生活的烦恼

题目链接
坦白讲还是弄不大懂建树的过程,对于结构体搞得不大明白。。就贴个代码作为建树和按层次遍历的模板吧,,代码是粘的网上的,自己稍加改动了一些还标明了不明白的地方,
附参考代码的链接
存留的代码

#include<iostream>
#include<string.h>
#include<queue>
#include<stack>
using namespace std;
string temp;
queue<string>cas;

typedef struct BiNode{
    string data;
    struct BiNode *lchild,*rchild;//这个*是什么意思呢?
}BiTNode,*BiTree;//加不加*又有什么区别呢?加*代表整个链表,否则就代表一个节点


void createBiTree(BiTree &M){//&不能去掉
,建树要看是不是空树
    cin>>temp;
//这里为什么要加输入的语句呢?
    if(temp.length()==1 && temp[0]=='#'){
       M=NULL;
    }
    else{
        M=new BiTNode;//创建一个新的节点
        M->data=temp;//先序的顺序
        createBiTree(M->lchild);
        createBiTree(M->rchild);
    }
}
void preOrder(BiTree M,int leval,int leval_goal){
    if(M==NULL)
       return;
    if(leval==leval_goal){
        cas.push(M->data);
        return;
    }
    preOrder(M->lchild,leval+1,leval_goal);
    preOrder(M->rchild,leval+1,leval_goal);
}
int main(){
    int N;
    string str;
    int n,i,j,k,t;
    cin>>N;
    while(N--){
        BiTree L;//声明一个链表
        createBiTree(L);//创建一个连表
        cin>>str;
        cin>>n;
        preOrder(L,1,n);//对链表进行处理
        int number=cas.size();//求出队列的长度
        if(number>1){
            for(i=0;i<number-1;i++){
              cout<<cas.front()<<"~";
              cas.pop();
            }
            cout<<cas.front()<<endl;
            cas.pop();
        }
        else{
            cout<<cas.front()<<endl;
            cas.pop();
        }
    }
    return 0;
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xj13821328013/article/details/52371137
上一篇NYOJ 929 密码宝盒(待续)
下一篇NYOJ 108 士兵杀敌(一)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭