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

    你可能感兴趣的文章
    设计模式之组合模式
    查看>>
    (Python学习笔记):字典
    查看>>
    (C++11/14/17学习笔记):线程启动、结束,创建线程多法、join,detach
    查看>>
    leetcode 14 最长公共前缀
    查看>>
    做做Java
    查看>>
    C++并发与多线程(一)
    查看>>
    java一些基本程序
    查看>>
    vue-依赖-点击复制
    查看>>
    LeetCode 116填充每个节点的下一个右侧结点指针
    查看>>
    2021-4-28【PTA】【L2-1 包装机 (25 分)】
    查看>>
    Arduino mega2560+MPU6050利用加速度值控制舵机
    查看>>
    紫书——蛇形填数
    查看>>
    A Guide to Node.js Logging
    查看>>
    webwxbatchgetcontact一个神奇的接口
    查看>>
    Edge浏览器:你的的内核我的芯
    查看>>
    【考研英语-基础-简单句】简单句的核心变化_谓语情态
    查看>>
    Jetson AGX Xavier硬件自启动
    查看>>
    统计字符数
    查看>>
    JS 数组的 every()、some() 、filter()、findIndex() 、find()、map()方法
    查看>>
    实现一个简易Vue(三)Compiler
    查看>>