博客
关于我
L2-006 树的遍历 (25分)
阅读量:553 次
发布时间:2019-03-09

本文共 1181 字,大约阅读时间需要 3 分钟。

#include 
#include
#include
#include
#include
using namespace std;struct node{ int id, index, level; post, in, pre;};void pre_order(int root, int startt, int endd, int index, int level){ if (startt > endd) return; int i = startt; while (i < endd && in[i].id != post[root].id) i++; pre.push_back({post[root].id, index, level}); pre_order(root + i - endd - 1, startt, i -1, index*2+1, level+1); pre_order(root -1, i+1, endd, index*2+2, level+1);}bool cmp(node x, node y){ if (x.level != y.level) return x.level < y.level; return x.index < y.index;}int main(){ int n; scanf("%d", &n); post.resize(n); in.resize(n); for (int i = 0; i < n; i++){ scanf("%d", &post[i].id); in[i].id =-1; // 初始化为-1,表示未读取 } // 初始化遍历方向,默认左优先 pre_order(n-1, 0, n-1, 0, 0); // 根据level和index排序结果 sort(pre.begin(), pre.end(), cmp); // 输出结果 for (int i=0; i

上述代码实现了二叉树的预序遍历(前序),其中使用了传统的非递归实现方式。代码的关键部分如下:

  • pre_order函数:实现了预序遍历,采用迭代的方式找到当前子树的根节点,然后递归地处理左子树和右子树。
  • cmp函数:用于排序预序遍历结果,根据节点的层级和索引进行排序。
  • main函数:读取输入数据,调用预序遍历函数并输出结果。

整个过程通过模拟手工编写的风格,将代码结构清晰化,便于理解和维护。

转载地址:http://yiipz.baihongyu.com/

你可能感兴趣的文章
迭代法求解递推方程
查看>>
主定理及其证明
查看>>
主定理的应用
查看>>
动态规划算法的迭代实现
查看>>
最优装载问题
查看>>
最大团问题
查看>>
圆排列问题
查看>>
课程总结
查看>>
认识CMake及应用
查看>>
CMake的主体框架
查看>>
实践:从简单CMake说起
查看>>
像素间的关系
查看>>
微积分(三)
查看>>
离散数学基础(一)
查看>>
Oracle
查看>>
软件工程应用
查看>>
数据科学
查看>>
论文报告/前沿文章
查看>>
Less
查看>>
JS模块化规范
查看>>