leetcode做题笔记106. 从中序与后序遍历序列构造二叉树

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

思路一:递归

cpp 复制代码
struct TreeNode* createTreeNode(int val) {
    struct TreeNode* ret = malloc(sizeof(struct TreeNode));
    ret->val = val;
    ret->left = ret->right = NULL;
    return ret;
}

struct TreeNode* buildTree(int* inorder, int inorderSize, int* postorder, int postorderSize) {
    if (postorderSize == 0) {
        return NULL;
    }
    struct TreeNode* root = createTreeNode(postorder[postorderSize - 1]);
    struct TreeNode** s = malloc(sizeof(struct TreeNode*) * 10001);
    int top = 0;
    s[top++] = root;
    int inorderIndex = inorderSize - 1;
    for (int i = postorderSize - 2; i >= 0; i--) {
        int postorderVal = postorder[i];
        struct TreeNode* node = s[top - 1];
        if (node->val != inorder[inorderIndex]) {
            node->right = createTreeNode(postorderVal);
            s[top++] = node->right;
        } else {
            while (top > 0 && s[top - 1]->val == inorder[inorderIndex]) {
                node = s[--top];
                inorderIndex--;
            }
            node->left = createTreeNode(postorderVal);
            s[top++] = node->left;
        }
    }
    return root;
}

分析:

本题要利用二叉树的中序遍历和后序遍历来确定二叉树,即可不断创建新二叉树将后序遍历的右子树赋值给新二叉树,不断创建,等栈顶为根节点的位置时再将左子树创建为新二叉树最后输出

总结:

本题考察对二叉树的应用,先找到根节点,不断添加二叉树即可解决

相关推荐
CM莫问12 分钟前
详解机器学习中的马尔可夫链
人工智能·算法·机器学习·概率论·马尔可夫·马尔科夫
南宫萧幕14 分钟前
基于 Luenberger 观测器的 PMSM 无速度传感器 id=0 矢量控制系统 Simulink 建模与实现(一)
算法·matlab·汽车·控制
斯维赤21 分钟前
每天学习一个小算法:选择排序
java·学习·算法
超级码力66626 分钟前
【Latex第三方文档类standalone】standalone类介绍及应用
算法·数学建模·信息可视化
明朝百晓生26 分钟前
强化学习 [chapter10] [page3 ]Actor-Critic Methods
算法
peterfei38 分钟前
一个 Tauri + Rust AI 编辑器是怎么同时适配 5 家 AI 大厂的?IfAI v0.4.3 架构拆解
人工智能·算法·架构
Via_Neo1 小时前
桶排序算法
算法·排序算法
China_Yanhy1 小时前
生产笔记:AI 集群的极致成本与数据保命指南
人工智能·笔记
斯维赤1 小时前
每天学习一个小算法:快速排序
java·python·学习·算法·排序算法
云起SAAS1 小时前
小智笔记APP源码 | 8大广告联盟聚合(穿山甲/优量汇/快手/百度) | 应用市场过审极速版 | uni-app全栈商用项目
笔记·uni-app·广告联盟·笔记app