博客
关于我
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/

你可能感兴趣的文章
Unity监听日记
查看>>
AndroidStudio跳到错误位置
查看>>
木马开发的基本理论基础(五)
查看>>
openssl服务器证书操作
查看>>
expect 模拟交互 ftp 上传文件到指定目录下
查看>>
linux系统下双屏显示
查看>>
PDF.js —— vue项目中使用pdf.js显示pdf文件(流)
查看>>
我用wxPython搭建GUI量化系统之最小架构的运行
查看>>
我用wxPython搭建GUI量化系统之Sizer布局管理与页面切换
查看>>
我用wxPython搭建GUI量化系统之多只股票走势对比界面
查看>>
我用wxPython搭建GUI量化系统之财务选股工具添加日历和排序
查看>>
selenium+python之切换窗口
查看>>
重载和重写的区别:
查看>>
搭建Vue项目步骤
查看>>
linux 编译出现的错误
查看>>
账号转账演示事务
查看>>
idea创建工程时错误提醒的是architectCatalog=internal
查看>>
SpringBoot找不到@EnableRety注解
查看>>
简易计算器案例
查看>>
在Vue中使用样式——使用内联样式
查看>>