博客
关于我
Leetcode 102题.从中序与后序遍历序列构造二叉树
阅读量:377 次
发布时间:2019-03-05

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

如何通过中序和后序遍历构造二叉树

在编程中,已知中序遍历和后序遍历的顺序,如何根据这些信息构造对应的二叉树呢?这种方法在二叉树的序列化和反序化过程中具有重要作用。以下是详细的解决方案和构造过程。

根节点的确定后序遍历的最后一个元素即为根节点。在给定的后序遍历序列中,最后一个元素是序列的最后一个节点。例如,在后序遍历中,最后一个元素是3。根据中序遍历,可以确定3在中序遍历中的位置,并将中序遍历划分为左右子树。

递归构造过程构造二叉树可以通过递归的方式来实现。递归函数的参数通常包括当前的中序遍历子数组、后序遍历子数组、左子树的起始位置和右子树的结束位置。

  • 根据后序遍历的最后一个元素,确定该元素在中序遍历中的位置。
  • 使用该位置将中序遍历划分为左右子树。
  • 递归地构造左右子树,直到所有子树都已构造完成。
  • 递归函数的正确实现递归函数的实现需要注意以下几点:

    • 确保左子树的起始位置和右子树的结束位置正确。
    • 确保每次递归调用时传递正确的子数组范围。

    以下是修正后的递归函数:

    class Solution {    Map
    map; TreeNode buildTree(List
    inorder, List
    postorder) { if (inorder.isEmpty()) return null; for (int i = 0; i < inorder.size(); i++) map.put(inorder.get(i), i); return build(inorder, postorder, 0, inorder.size() - 1, 0, postorder.size() - 1); } TreeNode build(List
    inorder, List
    postorder, int rf, int lf, int rs, int ls) { if (rf > lf) return null; int rootVal = postorder.get(ls); int rootPos = map.get(rootVal); TreeNode root = new TreeNode(rootVal); root.left = build(inorder, postorder, rf, rootPos - 1, rs, ls - 1); root.right = build(inorder, postorder, rootPos + 1, lf, rs + rootPos - rf, ls - 1); return root; }}

    注意事项在递归过程中,确保传递的参数范围正确。rs和ls的传递方式需要根据实际情况进行调整,避免范围错误。

    总结通过上述方法,可以成功地从中序和后序遍历信息中构造出对应的二叉树。递归的方法确保了二叉树的正确构造,适用于大范围的二叉树反序化问题。这种方法的核心在于利用后序遍历确定根节点,并在中序遍历中找到子树划分点,进而递归构造左右子树。

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

    你可能感兴趣的文章
    使用第三方sdk,微信wechat扫码登录
    查看>>
    windows下的netstat命令略解和linux下的netstat命令/awk打印或分割字符串
    查看>>
    mysql中的行转列
    查看>>
    java8中的闭包Function/BiFunction
    查看>>
    flink —— checkpoint机制
    查看>>
    shell脚本中冒泡排序、直接排序、反转排序
    查看>>
    WPS及Excel中Alt键的妙用 快捷键
    查看>>
    C - 食物链 并查集
    查看>>
    Pycharm 常用快捷键
    查看>>
    ValueError: check_hostname requires server_hostname
    查看>>
    基于Altium Designer的电子设计的入门指南
    查看>>
    基于LabVIEW的入门指南
    查看>>
    PCB布局系列汇总
    查看>>
    电阻入门知识
    查看>>
    电容入门知识
    查看>>
    C++面向对象
    查看>>
    正则表达式教程
    查看>>
    C语言教程(三)
    查看>>
    专题(七)贪心——AcWing 112. 雷达设备
    查看>>
    深入理解JVM(一)JVM概述、类的声明周期、JVM整体架构、JMM、volatile
    查看>>