6-7 树的层次遍历 uva122

Posted bxd123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6-7 树的层次遍历 uva122相关的知识,希望对你有一定的参考价值。

非常不熟练  照着书大的

 

晚上尝试一下自己打  了解二叉树  用数组打

 

第一次:

技术分享图片
#include<bits/stdc++.h>
using namespace std;
bool failed;


void addnode(int v,char *s);
char s[1000];
struct node
{
    bool  flag;
    int v;
     node *left,*right;
     node():flag(false),left(NULL),right(NULL){}

};
node *root;
node *newnode(){return new node();}
bool read_input()
{
    failed=false;
    root=newnode();
    for(;;)
    {
        if(scanf("%s",s)!=1)return false;
        if(!strcmp(s,"()")) break;
        int v;
        sscanf(&s[1],"%d",&v);
        addnode(v,strchr(s,,)+1);


    }
    return true;

}






void addnode(int v,char *s)
{
    int n=strlen(s);
    node *u=root;
    for(int i=0;i<n;i++)
    {
        if(s[i]==L)
        {
            if(u->left==NULL)u->left=newnode();
            u=u->left;

        }
        else if(s[i]==R)
        {
            if(u->right==NULL)u->right=newnode();
            u=u->right;

        }

    }
    if(u->flag)failed=true;
    u->v=v;
    u->flag=true;

}

bool bfs (vector<int>&ans)
{
    queue<node*>q; ans.clear();
    q.push(root);
    while(!q.empty())
    {
        node *u=q.front();q.pop();
        if(!u->flag)return false;
        ans.push_back(u->v);
        if(u->left!=NULL)q.push(u->left);
        if(u->right!=NULL)q.push(u->right);

    }
    return true;


}

int main()
{

   vector<int>ans;
   while(read_input())
   {
       if(!bfs(ans))failed=true;
       if(failed)printf("not complete
");
       else
       {
           for(int i=0;i<ans.size();i++)
           {
               if(i==ans.size()-1)printf("%d
",ans[i]);
               else printf("%d ",ans[i]);

           }


       }


   }










    return 0;
}
View Code

 

以上是关于6-7 树的层次遍历 uva122的主要内容,如果未能解决你的问题,请参考以下文章

UVa 122 树的层次遍历

UVA122 二叉树的层次遍历

uva122 二叉树的实现和层次遍历(bfs)

树的层次遍历(Trees on the level,UVA 122)

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

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