您的位置:首页 > 其它

按层逆遍历一棵树,使用满二叉树存储

2015-07-25 11:42 381 查看
机试题:
用C语言编写控制台程序。
使用二叉树按层逆遍历输出树的每一个元素。(即从最底层 往 上输出 直到根节点)
要求:
1,自定义数据结构。使用满二叉树存储输入数据。
2,input: 0,1,2,3,4,5,6,7
output:7,3,4,5,6,1,2 ,0

 分析:假如树的节点数目为num,则树高为:log(num)/log(2)+1,换底公司,log得到以2为底的log函数,其次int类型会自动截断,只保留整数

                其次,假定根节点为第1层,则第i层的节点编号为:pow(2,i-1)~pow(2,i)-1.

              因此,只需要从最底层依次往上面遍历就可以了。

#include<iostream>
#include<cmath>
using namespace std;

int main()//按层逆遍历一棵树,树使用满二叉树存储,直接用数组就好了
{
int num;
cout << "please input the number of nodes:" << endl;
cin >> num;
int treeArray[200];
memset(treeArray, 0, 200 * sizeof(treeArray[0]));
cout << "input the key of each node:" << endl;
for (int i = 1; i <= num; i++)
{
cin >> treeArray[i];
}
int level = log(num) / log(2) + 1;
for (int j = level; j > 0;j--)
for (int k = pow(2, j - 1); k <= pow(2, j) - 1; k++)
{
if (k<=num)
cout << treeArray[k] << "   ";
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: