二叉树hdu 1622 Trees on the level

Posted itcsl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树hdu 1622 Trees on the level相关的知识,希望对你有一定的参考价值。

【题意】

给定一棵树每个结点的权重和路径(路径用LR串表示),输出这棵树的层次遍历

【思路】

注意输入输出,sscanf用来格式化地截取需要的数据,strchr来在字符串中查找字符的位置

【Accepted】

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;

int num;
const int maxn=300;
char str[maxn];
struct node{
    int num;
    node *lef;
    node *rig;
};
node *root;
bool tag;
void bfs(node *rt){
    queue<node *> Q;
    Q.push(rt);
    while(!Q.empty()){
        node *q=Q.front();
        Q.pop();
        if(q==rt){
            printf("%d",q->num);
        }else{
            printf(" %d",q->num);
        }
        if(q->lef){
            Q.push(q->lef);
        }
        if(q->rig){
            Q.push(q->rig);
        }
        free(q);
    }
}
bool isComplete(node *rt){
    queue<node *> Q;
    Q.push(rt);
    while(!Q.empty()){
        node *q=Q.front();
        Q.pop();
        if(q->num==-1){
            return false;
        }
        if(q->lef!=NULL){
            Q.push(q->lef);
        }
        if(q->rig!=NULL){
            Q.push(q->rig);
        }
    }
    return true;
}
void print(node *root){
    if(tag==false){
        printf("not complete
");
        return;
    }
    bool flag=isComplete(root);
    if(!flag){
        printf("not complete
");
        return;
    }
    bfs(root);
    puts("");
}
int main(){
    root=(node *)malloc(sizeof(node));
    root->num=-1;
    root->lef=NULL;
    root->rig=NULL;
    tag=true;
    while(scanf("%s",str)!=EOF){
        if(!strcmp(str,"()")){
            print(root);
            root=(node *)malloc(sizeof(node));
            root->num=-1;
            root->lef=NULL;
            root->rig=NULL;
            tag=true;
        }else{
            sscanf(&str[1],"%d",&num);
        //    printf("%d
",num);
            char *comma=strchr(str,,);
            char *path=comma+1;
            node *now=root;
            for(char *i=path;*i!=);i++){
                if(*i==L){
                    if(now->lef==NULL){
                        node *nd=(node *)malloc(sizeof(node));
                        nd->num=-1;
                        nd->lef=NULL;
                        nd->rig=NULL;
                        now->lef=nd;
                    }
                    now=now->lef;
                }else{
                    if(now->rig==NULL){
                        node *nd=(node *)malloc(sizeof(node));
                        nd->num=-1;
                        nd->lef=NULL;
                        nd->rig=NULL;
                        now->rig=nd;
                    }
                    now=now->rig;
                }
            }
            if(now->num!=-1){
                tag=false; 
            }else{
                now->num=num;
            }
        }
    }
    free(root);
    return 0;
}

 

以上是关于二叉树hdu 1622 Trees on the level的主要内容,如果未能解决你的问题,请参考以下文章

UVA 122 -- Trees on the level (二叉树 BFS)

UVa 122 Trees on the level(链式二叉树的建立和层次遍历)

UVa 122 Trees on the level (动态建树 && 层序遍历二叉树)

二叉树层序遍历,Trees on the level UVA - 122——紫书第六章例题和字符串新解

UVa122-Trees on the level

Uva 122 树的层次遍历 Trees on the level lrj白书 p149