网站建设 合作协议,店铺运营计划方案,互联网外包公司值得去吗,西点培训前十名学校完全二叉树的层序遍历
一个二叉树#xff0c;如果每一个层的结点数都达到最大值#xff0c;则这个二叉树就是完美二叉树。对于深度为 D 的#xff0c;有 N 个结点的二叉树#xff0c;若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点#xff0c;这样的树就是完全…完全二叉树的层序遍历
一个二叉树如果每一个层的结点数都达到最大值则这个二叉树就是完美二叉树。对于深度为 D 的有 N 个结点的二叉树若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点这样的树就是完全二叉树。
给定一棵完全二叉树的后序遍历请你给出这棵树的层序遍历结果。
输入格式 输入在第一行中给出正整数 N≤30即树中结点个数。第二行给出后序遍历序列为 N 个不超过 100 的正整数。同一行中所有数字都以空格分隔。
输出格式 在一行中输出该树的层序遍历序列。所有数字都以 1 个空格分隔行首尾不得有多余空格。 输入样例 8 91 71 2 34 10 15 55 18 输出样例 18 34 55 71 2 10 15 91 解题思路
代码解析
#include iostream
using namespace std;
const int N 32;
int n, cur;
int a[N], ret[N];void dfs(int u)
{if (u n) return;dfs(2 * u);dfs(2 * u 1);ret[u] a[cur];
}
int main()
{cin n;for (int i 1; i n; i)cin a[i];cur 1;dfs(1);//直接遍历后序按照数组的下标后序放到ret中正好是层序for (int i 1; i n; i){cout ret[i];if (i n) cout ;}return 0;
}