#include<iostream>
#include<cstdio>
#include<string.h>
#include<queue>
using namespace std;
const int maxn=10000+5;
struct Node{
bool have_value;
int v;
Node *left,*right;
Node():have_value(false),left(NULL),right(NULL){}
};
bool failed;
Node* tree;
char s[maxn];
Node* new_node()
{
return new Node();
}
bool addnode(int v,char* s)
{
int n=strlen(s);
Node* node=tree;
for(int i=0;i<n;i++){
if('L'==s[i]){
if(node->left==NULL)node->left=new_node();
node=node->left;
}
if('R'==s[i]){
if(node->right==NULL)node->right=new_node();
node=node->right;
}}
if(node->have_value)return false;//重复输入
node->v=v;
node->have_value=true;
return true;
}
void remove_tree(Node* tree)
{
if(tree==NULL) return;
remove_tree(tree->left);
remove_tree(tree->right);
delete tree;
}
void bfs()
{
queue<Node*> nque;
nque.push(tree);
while(!nque.empty()){
Node* node=nque.front();
nque.pop();
if(!node->have_value){printf("not complete\n");return;}
printf("%d ",node->v);
if(node->left!=NULL)nque.push(node->left);
if(node->right!=NULL)nque.push(node->right);
}
printf("\n");
}
void read_input()
{
tree=new_node();
failed=false;
while(scanf("%s",s)==1){
if(!strcmp("()",s)){bfs();remove_tree(tree);tree=new_node();}
else{
int v;
sscanf(&s[1],"%d",&v);
if(!addnode(v,strchr(s,',')+1))failed=true;
}
}
}
int main()
{
read_input();
return 0;
}
122 - Trees on the level
最新推荐文章于 2020-07-17 23:58:25 发布
本文介绍了一种使用C++实现的二叉树数据结构,并通过广度优先搜索(BFS)来检查树是否完整及输出节点值。文章详细展示了如何添加带有路径标识的节点、如何移除整个树结构以及如何读取输入并构建二叉树。

311

被折叠的 条评论
为什么被折叠?



