二叉树建立 以及 bfs层次遍历
来源:互联网 发布:cms 文章收费 编辑:程序博客网 时间:2024/05/17 07:35
Problem description:
输入一颗二叉树,你的任务是按从上到下、从左到右的顺序输出各个节点的值。每个节点都按照从根节点到他的移动序列给出(L表示左,R表示右)。在输入中,每个节点的左括号和有括号之间没有空格,相邻节点之间有一个空格。每棵树的输入用括号()结束。
注意:如果从根到某个叶节点的路径上有的节点没有在输入中给出或者给出了超过一次,应当输出-1。借点数不超过256。
样例输入:
(11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) ()
(3,L) (4,R) ()
样例输出:
5 4 8 11 13 4 7 2 1
-1
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <stdlib.h>using namespace std;int failed=0;typedef struct Tnode //typedef 声明{ int have_value; //是否被赋值过 int v; //节点值 struct Tnode *left,*right;}Node;Node *root; //根节点Node *newnode() //建立新节点{ Node *u=(Node *)malloc(sizeof(Node)); if(u!=NULL) { u->have_value=0; u->left=u->right=NULL; } return u;}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=1; u->v=v; u->have_value=1;}char s[1000];int read_input() //读入信息{ failed=0; root=newnode(); while(scanf("%s",s)!=EOF) { if(strcmp(s,"()")==0) break; int v; sscanf(&s[1],"%d",&v); addnode(v,strchr(s,',')+1); } return 1;}int n=0,ans[1000]; //节点总数和输出序列int bfs(){ int front=0,rear=1; Node *q[1000]; q[0]=root; //初始的一个节点 while(front<rear) { Node *u=q[front++]; if(!u->have_value) return 0; //有的节点没有呗赋值过,表明输入有误 ans[n++]=u->v; if(u->left!=NULL) q[rear++]=u->left; if(u->right!=NULL) q[rear++]=u->right; } return 1;}int main(){ read_input(); if(failed||!bfs()) printf("-1"); else for(int i=0;i<n;i++) printf("%d ",ans[i]); printf("\n"); return 0;}
- 二叉树建立 以及 bfs层次遍历
- 初始BFS ,以及二叉树层次遍历
- 建立平衡二叉树+层次遍历
- java根据层次遍历建立二叉树
- 建立二叉树,并层次遍历输出
- 二叉树建立 ---层次遍历方式
- 二叉树建立以及先序、中序、后序、层次遍历(JAVA 实现)
- 二叉树的建立、遍历、深度、高度及层次遍历
- 6-3-2 二叉树层次遍历(BFS)
- UVA 11234 - Expressions 二叉树建树+BFS 层次遍历
- 白书练习 层次遍历 (二叉树的bfs)
- 数据结构 BFS层次遍历二叉树【C语言版本】
- 剑指offer--二叉树的深度--层次遍历/BFS
- 二叉树先序后序递归建立,前中后序层次非递归遍历,以及统计叶子结点个数以及树的深度
- 二叉树的递归遍历以及层次遍历
- 二叉树的非递归遍历以及层次遍历
- 二叉树的层次遍历以及二叉树的深度
- 二叉树的建立与前、中、后、层次遍历
- Android在使用HttpClient访问https时认证策略
- get与post 的区别
- Qt之中文乱码
- Map.Entry使用详解
- boost::asio网络传输错误码的一些实验结果(recv error_code )
- 二叉树建立 以及 bfs层次遍历
- ecshop开发必备
- Linux下的top命令
- String,StringBuffer与StringBuilder的区别
- JDK1.5 之 枚举
- C++类
- QLineEdit之文本不被选中
- 黑马程序员:Java基础篇之String字符串
- Screen 操作快捷键