关闭

NYOJ 1063 生活的烦恼

标签: 数据结构二叉树ACM
136人阅读 评论(0) 收藏 举报
分类:

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

#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;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4749次
    • 积分:647
    • 等级:
    • 排名:千里之外
    • 原创:63篇
    • 转载:3篇
    • 译文:0篇
    • 评论:1条
    最新评论