UVA122 二叉树的层次遍历
Posted hh13579
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA122 二叉树的层次遍历相关的知识,希望对你有一定的参考价值。
题目链接
https://vjudge.net/problem/UVA-122
#include<bits/stdc++.h> using namespace std; #define ll long long const int maxn=256+10; char s[maxn]; struct Node bool have_value; int v; Node *left,*right; Node():have_value(false),left(NULL),right(NULL); ; Node *root; Node *newnode()return new Node(); bool failed; 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->have_value) failed = true; u->v=v; u->have_value=true; void remove_tree(Node *u) if(u==NULL)return; remove_tree(u->left); remove_tree(u->right); delete u; bool bfs(vector<int> &ans) queue<Node*>q; ans.clear(); q.push(root); while(!q.empty()) Node *u=q.front(); q.pop(); if(!u->have_value)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; bool read_input() failed =false; root=newnode(); for(;;) if(scanf("%s",s)!=1)return false; if(strcmp(s,"()")==0)break; int v; sscanf(&s[1],"%d",&v); addnode(v,strchr(s,‘,‘)+1); return true; int main() vector<int>ans; while(read_input()) if(!bfs(ans))failed=1; if (failed) printf("not complete\n"); else for (int i = 0; i < ans.size(); i++) if (i != 0) printf(" "); printf("%d", ans[i]); printf("\n"); return 0;
以上是关于UVA122 二叉树的层次遍历的主要内容,如果未能解决你的问题,请参考以下文章
UVa 122 Trees on the level(链式二叉树的建立和层次遍历)