首页 > 其他分享 >力扣106 构造二叉树

力扣106 构造二叉树

时间:2022-09-24 15:57:43浏览次数:64  
标签:back int reBuild mid next 力扣 pos 二叉树 106

   

class Solution {

public:

    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {

    return reBuild(inorder, postorder);

}

TreeNode* reBuild(vector<int> mid, vector<int> pos) {

    if (pos.empty())

        return nullptr;

    TreeNode* newNode = new TreeNode(*pos.rbegin());

    int i = 0 ;

    //找到他在中序中的位置

    for (; i < mid.size(); ++i)

        if (mid[i] == *pos.rbegin())

            break;

    pos.pop_back();

    vector<int>L_next_mid,L_next_pos, R_next_mid, R_next_pos;

    //切割左字串

    for (int k = 0; k < i; ++k)

        L_next_mid.push_back(mid[k]);

    for (int k = 0; k < L_next_mid.size();++k)

        L_next_pos.push_back(pos[k]);

    //切割右字串

    for (int k = i + 1; k < mid.size(); ++k)

        R_next_mid.push_back(mid[k]);

    for (int k = L_next_pos.size(); k < pos.size(); ++k)

        R_next_pos.push_back(pos[k]);

    newNode->left = reBuild(L_next_mid,L_next_pos);

    newNode->right = reBuild(R_next_mid, R_next_pos);

    return newNode;

}

};

   

   

猪比思路,每次pos的最后一个元素都是当前树的根节点,然后再分别切割出子左树的中序和后序、右子树的中序和后序,进行递归,成功打败了自己

   

   

效率低的原因:

每次构造子树的时候都需要遍历一次inorder数组来找到树根的下标,所以不妨直接一开始就使用hashMap来映射数字及其下标,这样的话能极大提高运行效率!!

标签:back,int,reBuild,mid,next,力扣,pos,二叉树,106
From: https://www.cnblogs.com/Syukuu/p/16725768.html

相关文章

  • 力扣872 叶子相似的树
      思路:直接前序遍历两个树获得叶子节点,然后对vector容器进行比较    class Solution {public:    bool leafSimilar(TreeNode* root1, TreeNode* ......
  • 力扣101 对称二叉树
        class Solution {public:    bool isSymmetric(TreeNode* root) {    if (root == nullptr)        return true;    retur......
  • 力扣1912——设计电影租借系统
    1912.设计电影租借系统难度困难你有一个电影租借公司和 n 个电影商店。你想要实现一个电影租借系统,它支持查询、预订和返还电影的操作。同时系统还能生成一份当......
  • 力扣_剑指Offer_个人解题资料
    day01剑指Offer09.用两个栈实现队列:题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列......
  • leetcode 144. Binary Tree Preorder Traversal 二叉树展开为链表(中等)
    一、题目大意给你二叉树的根节点root,返回它节点值的前序遍历。示例1:输入:root=[1,null,2,3]输出:[1,2,3]示例2:输入:root=[]输出:[]示例3:输入:root=......
  • 力扣21(java&python)-合并两个有序链表(简单)
    题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1......
  • 平衡二叉树 -java实现
     packagetree;/***@author:tianhaichao*@date:2022/9/2215:38*@description:平衡二叉树AVL*1、每个节点的左右子树的高度差不大于1--->|left.height......
  • 二叉树遍历(递归、迭代)
    前中后序遍历递归法//前序遍历varpreorderTraversal=function(root){letres=[];constdfs=function(root){  if(root===null)return;  //先序遍历所......
  • 王道-考研-数据结构-线索二叉树
    线索二叉树的构造常用的是中序线索二叉树。寻找前驱结点:若左指针为线索,则其指向结点为前驱结点。若左指针为左孩子,则其左子树的最右侧结点为前驱结点。寻找后继结点......
  • 【解题报告】SP10628 COT-Count on a tree
    SP10628COT这道题的传送门双倍经验,两个题一样的啦简要题意给出一颗n个节点的树,每个节点都有一个权值,求u到v的第k小权值其实就是树上的区间第k小主席树+树上差分......