leetcode106.从中序与后序遍历序列构造二叉树、leetcode105.从前序与中序遍历序列构造二叉树

leetcode106.从中序与后序遍历序列构造二叉树

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。
示例 1:
在这里插入图片描述
输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]
输出:[3,9,20,null,null,15,7]

示例 2:
输入:inorder = [-1], postorder = [-1]
输出:[-1]

解题思路

1、后序数组为0,空节点
2、后序数组最后一个元素为根节点
3、寻找根节点在中序数组位置作切割点
4、切中序数组
5、切后序数组
6、递归处理左区间右区间

struct TreeNode* buildTree(int* inorder, int inorderSize, int* postorder, int postorderSize) {
   if(!inorderSize) 
    return NULL;
     struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
    if (node == NULL) {
        // 处理内存分配失败
        return NULL;
    }
    node->val=postorder[postorderSize-1];
    int index;
    for (index = 0; index < inorderSize; index++) {
        if(inorder[index] == postorder[postorderSize-1]) {
            break;
        }
    }
    int rightSize=inorderSize-index-1;
    node->left=buildTree(inorder,index,postorder,index);//左闭右开
    node->right=buildTree(inorder+index+1,rightSize,postorder + index, rightSize);
    return node;
}

leetcode105.从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

示例 1:
在这里插入图片描述
输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
输出: [3,9,20,null,null,15,7]

示例 2:
输入: preorder = [-1], inorder = [-1]
输出: [-1]

解题思路

1、前序数组为0,空节点
2、前序数组第一个元素为根节点
3、寻找根节点在中序数组位置作切割点
4、切中序数组
5、切前序数组
6、递归处理左区间右区间

struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize) {
    if(!inorderSize) 
    return NULL;
     struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
    if (node == NULL) {
        // 处理内存分配失败
        return NULL;
    }
    node->val=preorder[0];
    int index;
    for (index = 0; index < inorderSize; index++) {
        if(inorder[index] == preorder[0]) {
            break;
        }
    }
    int rightSize=inorderSize-index-1;
    node->left=buildTree(preorder+1,index,inorder,index);//左闭右开
    node->right=buildTree(preorder+index+1,rightSize,inorder+index+1,rightSize);
    return node;
}

最近更新

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

    2024-07-21 15:22:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 15:22:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 15:22:02       45 阅读
  4. Python语言-面向对象

    2024-07-21 15:22:02       55 阅读

热门阅读

  1. 【Golang】你真的学会切片了吗?

    2024-07-21 15:22:02       16 阅读
  2. Emacs vs IDE:用Emacs写程序真的更方便吗?

    2024-07-21 15:22:02       18 阅读
  3. libevent版本和日志相关接口

    2024-07-21 15:22:02       18 阅读
  4. 编写一款2D CAD/CAM软件(二十一)生产ASCII ART Logo

    2024-07-21 15:22:02       16 阅读
  5. 贝叶斯实现拼写检查器

    2024-07-21 15:22:02       18 阅读
  6. 12.顶部带三角形的边框 & CSS 关键字 currentColor

    2024-07-21 15:22:02       16 阅读
  7. Redis 基数树

    2024-07-21 15:22:02       17 阅读
  8. 树上统计

    2024-07-21 15:22:02       18 阅读
  9. Android中Retrofit的学习和使用记录

    2024-07-21 15:22:02       20 阅读
  10. Try ubuntu core (by quqi99)

    2024-07-21 15:22:02       20 阅读
  11. 独孤思维:副业赚钱,易如反掌

    2024-07-21 15:22:02       16 阅读