0%

完全二叉树DFS转BFS

题目描述:完全二叉树DFS转BFS

题目:

给定一个字符串,其字符序列是根据一个完全二叉树通过深度优先遍历得到的,二叉树的每个节点是一个单字符。如果对这个完全二叉树改用广度优先遍历算法,那么得到的字符串是什么,将这个字符串序列以字符串的形式输出。

输入描述:

输入一行,一个由字母和数字组成的字符串,字符串长度为2n-1,例如 23-1 = 7,n大于等于1。如果输入字符串的长度不合要求,那么统一输出字符串WRONG INPUT。

输出描述:
输出一行字符串。

样例输入:abcdefg
样例输出:abecdfg

本题考点:

1). 完全二叉树的理解

2). 前序遍历

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<bits/stdc++.h>
using namespace std;
int n, i;
string x, res;

bool Check(int n) {
if ((n&(n-1))==0) {
return false;
}
return true;
}

void dfs(int index) {
if(index < n) {
res[index] = x[i++];
dfs(index * 2);
dfs(index * 2 + 1);
}
}
int main() {
cin>>x;
n = x.size() + 1;
if (Check(n)) {
cout << "WRONG INPUT";
} else {
res = x;
i = 0;
dfs(1);
for (int i = 1; i < n; i++)
cout << res[i];
}
return 0;
}
喜欢你就打赏一下