题目1523:从上往下打印二叉树
- 题目描述:
-
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- 输入:
-
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行一个整数n(1<=n<=1000, :n代表将要输入的二叉树元素的个数(节点从1开始编号)。接下来一行有n个数字,代表第i个二叉树节点的元素的值。接下来有n行,每行有一个字母Ci。Ci=’d’表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号。Ci=’l’表示第i个节点有一个左孩子,紧接着是左孩子的编号。Ci=’r’表示第i个节点有一个右孩子,紧接着是右孩子的编号。Ci=’z’表示第i个节点没有子孩子。
- 输出:
-
对应每个测试案例,
按照从上之下,从左至右打印出二叉树节点的值。
- 样例输入:
-
78 6 5 7 10 9 11d 2 5d 3 4zzd 6 7zz
- 样例输出:
-
8 6 10 5 7 9 11 二叉树的遍历: 广搜 ,特别适合考研看看。 先序,深搜。我觉得还是要注重基础,这些东西还是有用的。
#include
#include #include #include #include #include #include #include #include #define Max(a,b) ((a)>(b)?(a):(b))#define Min(a,b) ((a)<(b)?(a):(b))using namespace std ;const int size=1008 ;struct Me{ struct Node{ int left ; int right ; }; Node node[size]; int N ; int turn[size] ; vector ans ; Me(){} Me(int n):N(n){} void make_grap(){ char str[2] ; for(int i=1;i<=N;i++){ scanf("%d",&turn[i]) ; node[i].left=node[i].right=0 ; } for(int i=1;i<=N;i++){ scanf("%s",str) ; if(str[0]=='d') scanf("%d%d",&node[i].left,&node[i].right) ; else if(str[0]=='l') scanf("%d",&node[i].left) ; else if(str[0]=='r') scanf("%d",&node[i].right) ; } } void bfs(){ queue que ; que.push(1) ; while(!que.empty()){ int now=que.front() ; que.pop() ; ans.push_back(turn[now]) ; if(node[now].left) que.push(node[now].left) ; if(node[now].right) que.push(node[now].right) ; } } void gao_qi(){ make_grap() ; ans.clear() ; bfs() ; printf("%d",ans[0]) ; for(int i=1;i 题目1521:二叉树的镜像
时间限制:1 秒
- 题目描述:
-
输入一个二叉树,输出其镜像。
- 输入:
-
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000,n代表将要输入的二叉树节点的个数(节点从1开始编号)。接下来一行有n个数字,代表第i个二叉树节点的元素的值。接下来有n行,每行有一个字母Ci。Ci=’d’表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号。Ci=’l’表示第i个节点有一个左孩子,紧接着是左孩子的编号。Ci=’r’表示第i个节点有一个右孩子,紧接着是右孩子的编号。Ci=’z’表示第i个节点没有子孩子。
- 输出:
-
对应每个测试案例,
按照前序输出其孩子节点的元素值。若为空输出NULL。
- 样例输入:
-
78 6 10 5 7 9 11d 2 3d 4 5d 6 7zzzz
- 样例输出:
-
8 10 11 9 6 7 5
#include
#include #include #include #include #include #include #include #include #define Max(a,b) ((a)>(b)?(a):(b))#define Min(a,b) ((a)<(b)?(a):(b))using namespace std ;const int size=1008;struct Me{ int N ; int turn[size] ; vector ans ; struct Node{ int left ; int right ; }node[size]; Me(){} Me(int n):N(n){} void make_grap(){ char str[2] ; int x , y ; for(int i=1;i<=N;i++) scanf("%d",&turn[i]) ; for(int i=1;i<=N;i++){ scanf("%s",str) ; if(str[0]=='d'){ scanf("%d%d",&x,&y) ; node[i].left=y ; node[i].right=x ; } else if(str[0]=='l'){ scanf("%d",&x) ; node[i].right=x ; node[i].left=0 ; } else if(str[0]=='r'){ scanf("%d",&x) ; node[i].left=x ; node[i].right=0 ; } else node[i].left=node[i].right=0 ; } } void dfs(int now){ // puts("--") ; ans.push_back(turn[now]) ; if(node[now].left) dfs(node[now].left) ; if(node[now].right) dfs(node[now].right) ; } void gao_qi(){ make_grap() ; ans.clear() ; dfs(1) ; printf("%d",ans[0]) ; for(int i=1;i >n){ Me me(n) ; me.gao_qi() ; } return 0 ;}
-