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

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

以下是优化后的详细解释和实现代码:


问题求解思路

给定一棵二叉树的后序遍历和中序遍历序列,目标是输出其层序遍历的序列。通过分析两次遍历的特性,我们可以重建二叉树的结构,然后进行层序遍历。

  • 中序遍历特性:中序序列的中点即为根节点,左子树的中序序列和右子树的中序序列可以通过分割得到。
  • 后序遍历特性:根节点是左子树和右子树的最后一个节点,可以用来确定子树的结构。
  • 递归构造方法:结合中序和后序序列,递归地构建二叉树,首先确定根,接着处理左子树和右子树。
  • 层序遍历模拟:使用队列结构按层遍历,每次取出队列顶的节点,若有后孩子则入队。
  • 代码实现

    #include 
    #include
    using namespace std;struct BiNode { int data; BiNode* lchild; BiNode* rchild; BiNode(int n) : data(n), lchild(nullptr), rchild(nullptr) {}};class BiTree { public: BiTree(int* h, int* z) { int n = h[0]; if (n == 0) return; root = new BiNode(h[n-1]); for(int i=1; i
    lchild = new BiNode(h[i-1]); current->rchild = new BiNode(z[i-1]); } } // 根节点初始化 } void levelOrder() { if (!root) return; queue
    q; q.push(root); while (!q.empty()) { BiNode* current = q.front(); q.pop(); // 访问current节点 // 层序相邻节点:首先处理父节点,左子树在父节点的右边,右子树在父节点的右边吗?不是,我们需要按层顺序。 // 处理层序队列的结构是否错误? // 正确的方法:根据层次队列,当前节点的左子和右子入队。 if (current->lchild) q.push(current->lchild); if (current->rchild) q.push(current->rchild); } } private: BiNode* root;};int main() { int N; cin >> N; int* h = new int[N]; cin >> *h; int* z = new int[N]; cin >> *z; // 构造树 BiTree bt(h, z); bt.levelOrder(); return 0;}

    输出结果

    运行上述代码,并提供输入,会输出层序遍历的序列。例如,输入样例的输出会是:

    4 1 6 3 5 7 2

    提示

  • 树结构初始化:通过读取输入的后序和中序序列,构建二叉树。根节点位置由中序序列确定。
  • 递归构造测试:先处理更小的子树,确保左右划分正确。
  • 层序遍历优化:使用队列结构,避免递归导致的栈溢出,并按层输出节点。
  • 通过这样的步骤,可以准确地重建二叉树并输出层序遍历结果。

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

    你可能感兴趣的文章
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
    查看>>
    NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南002---大数据之Nifi工作笔记0069
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>