LeetCode106:从中序与后序遍历序列构造二叉树

题目描述
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。

在这里插入图片描述

解题思想
第一步:如果数组大小为零的话,说明是空节点了。

第二步:如果不为空,那么取后序数组最后一个元素作为节点元素。

第三步:找到后序数组最后一个元素在中序数组的位置,作为切割点

第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)

第五步:切割后序数组,切成后序左数组和后序右数组

第六步:递归处理左区间和右区间

代码

class Solution {
public:
    TreeNode* traversal(vector<int>& inorder, vector<int>& postorder) {
        if (postorder.size() == 0) return nullptr;
        
        //后续遍历数组最后一个元素,就是当前的中间节点
        int rootValue = postorder[postorder.size() - 1];
        TreeNode* root = new TreeNode(rootValue);

        //如果就一个节点
        if (postorder.size() == 1) return root;
        
        //找到中序遍历的切割点
        int index;
        for (index = 0; index < inorder.size(); index++) {
            if (inorder[index] == rootValue) break;
        }

        //切割中序数组:左闭右开[0,index)
        vector<int> leftInorder(inorder.begin(), inorder.begin() + index);
        //[index+1,end)
        vector<int> rightInorder(inorder.begin() + index + 1, inorder.end());

        //postorder舍弃末尾元素
        postorder.resize(postorder.size() - 1);
        
        //切割后续数组:个数 为中序数组的left元素个数就是 和 right元素个数
        vector<int> leftPostorder(postorder.begin(), postorder.begin() + leftInorder.size());
        vector<int> rightPostorder(postorder.begin() + leftInorder.size(), postorder.end());
        
        root->left = traversal(leftInorder, leftPostorder);
        root->right = traversal(rightInorder, rightPostorder);

        return root;   
    }

    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        return traversal(inorder, postorder);
    }
};

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 19:22:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 19:22:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 19:22:02       82 阅读
  4. Python语言-面向对象

    2024-04-12 19:22:02       91 阅读

热门阅读

  1. DFL在网络安全审计中的应用研究的开题报告

    2024-04-12 19:22:02       34 阅读
  2. 对用户上传图片进行压缩

    2024-04-12 19:22:02       37 阅读
  3. 请求的数据类型{ }{[ ]} 解析

    2024-04-12 19:22:02       42 阅读
  4. fastjson2 简单使用案例

    2024-04-12 19:22:02       42 阅读
  5. Qt安装 qt-unified-windows-x64-online.exe下载慢

    2024-04-12 19:22:02       33 阅读
  6. 苍穹外卖总结

    2024-04-12 19:22:02       32 阅读
  7. Yarn vs npm的大同小异&Yarn是什么?

    2024-04-12 19:22:02       38 阅读