按层逆遍历一棵树,使用满二叉树存储
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.
因此,只需要从最底层依次往上面遍历就可以了。
用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; }
相关文章推荐
- android简单的图片适配
- Android 简易弹幕效果实现
- btHashMap vs std::unodered_map ——两种hashmap的性能对比测试
- PCA和SVD简述
- POJ3723 Conscription 【并检查集合】
- 初探GCD
- 【白注意】Windows XP 大胆拥抱Linux在系统中所遇到的问题
- Openssl errstr命令
- Visual Studio 2012操作笔记
- CSS+DIV实现鼠标经过背景变色 [onmouseover; onmouseout]
- git常用命令
- Ardunio_Case_5_breath_light
- eclipse常用的快捷键
- 如何kill一个 defunct 进程
- LCA与RMQ
- 【OpenCV人脸识别入门教程之一】安装OpenCV及Windows系统环境配置
- 运算放大器[二] -----基础
- Linux信号
- Linux零碎学习
- 代悲白头翁