首页 > 其他分享 >剑指 Offer 07. 重建二叉树(中等)

剑指 Offer 07. 重建二叉树(中等)

时间:2023-08-17 21:46:19浏览次数:43  
标签:preorder 遍历 07 Offer right 二叉树 root 节点 left

题目:

class Solution {      //本题思路:利用中序遍历,从前序遍历中找到左、右子树的根节点
public:
    unordered_map<int, int> dic;      //创建字典,映射当前根节点在中序遍历中的位置,以便于划分当前根节点的左右子树
    vector<int> preorder;      //即下面的this->preorder
    TreeNode* traversal(int root, int left, int right){      //root是前序遍历中根节点位置,left和right是中序遍历里子树的左右边界
        if(left>right) return nullptr;      //子树left越过right说明为空
        TreeNode* node = new TreeNode(preorder[root]);      //创建该子树的根节点
        int i = dic[preorder[root]];      //找到根节点在中序遍历里的位置
        node->left = traversal(root+1, left, i-1);      //左子树的根节点为前序遍历中root+1,子树在中序遍历中的左右边界为left和i-1
        node->right = traversal(root+i-left+1, i+1, right);     //右子树的根节点为(根节点+左子树长度(i-left)+1),子树在中序遍历中的左右边界为i+1和right
        return node;      //返回根节点
    }
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        this->preorder=preorder;
        for(int i=0;i<inorder.size();i++) dic[inorder[i]]=i;      //创建映射关系
        return traversal(0, 0, inorder.size()-1);
    }
};

作者:Krahets
链接:https://leetcode.cn/problems/zhong-jian-er-cha-shu-lcof/solutions/100091/mian-shi-ti-07-zhong-jian-er-cha-shu-di-gui-fa-qin/
来源:力扣(LeetCode)

标签:preorder,遍历,07,Offer,right,二叉树,root,节点,left
From: https://www.cnblogs.com/fly-smart/p/17638922.html

相关文章

  • [代码随想录]Day20-二叉树part09
    题目:669.修剪二叉搜索树思路:遍历到的值小于最小值,说明左子树里的所有节点都小于最小值,舍弃左子树。遍历到的值大于最大值,说明右子树里的所有节点都大于最大值,舍弃右子树。如果在范围内,就拼接左右子树然后返回节点代码:/***Definitionforabinarytreenode.*typeTr......
  • 【题解】#373. 「USACO1.1」Friday the Thirteenth 题解(2023-07-19更新)
    #373.「USACO1.1」FridaytheThirteenth题解本文章的访问次数为次。Part1提示题目传送门欢迎大家指出错误并私信这个蒟蒻欢迎大家在下方评论区写出自己的疑问(记得@这个蒟蒻)Part2背景这个蒟蒻又一次写了一篇大水题的题解(话说为什么是又),当然也是为了纪念他的\(......
  • 【题解】#68. 「NOIP2004」津津的储蓄计划 题解(2023-07-19更新)
    #68.「NOIP2004」津津的储蓄计划题解本文章的访问次数为次。Part1提示题目传送门欢迎大家指出错误并私信这个蒟蒻欢迎大家在下方评论区写出自己的疑问(记得@这个蒟蒻)Part2背景这是这个蒟蒻的第一篇题解,也是这个蒟蒻对自己的\(50\)AC的纪念。Part3更新日志......
  • 春秋云镜像-CVE-2022-0788
    准备:攻击机:win10。靶机:春秋云镜像-CVE-2022-0788。写这个的时候在网上想查找下该漏洞的利用方式,没有找到相关的资料,因此记录下自己通过这个靶场的poc与exp。curl'http://eci-2ze4uhij7kcjyftbwltx.cloudeci1.ichunqiu.com/index.php?rest_route=/xs-donate-form/payment-......
  • 《剑指Offer》-16-数值的整数次方
    将n次相乘的幂运算转化为log2N次平方运算,并且采用递归算法原书给出的最优算法本身不处理负数,是外层函数处理的 doublemyPow(doublex,intn){ doubleres=pow(x,abs(n)); if(n<0)res=1/res; returnres; } doublepow(doublex,intn){ if(n==......
  • 代码随想录算法训练营第十八天| 513.找树左下角的值 112. 路径总和 106.从中序与
     找树左下角的值     卡哥建议:本地递归偏难,反而迭代简单属于模板题, 两种方法掌握一下   题目链接/文章讲解/视频讲解:https://programmercarl.com/0513.%E6%89%BE%E6%A0%91%E5%B7%A6%E4%B8%8B%E8%A7%92%E7%9A%84%E5%80%BC.html   做题思路:   题目说......
  • 代码随想录算法训练营第十七天| 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子
     卡哥建议:迭代法,大家可以直接过,二刷有精力的时候 再去掌握迭代法。  110.平衡二叉树 (优先掌握递归)   卡哥建议:再一次涉及到,什么是高度,什么是深度,可以巩固一下。   题目链接/文章讲解/视频讲解:https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%......
  • 【剑指Offer】58、对称的二叉树
    【剑指Offer】58、对称的二叉树题目描述:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。解题思路:本题判断一棵树是不是对称的,和第18题可以对比分析:二叉树的镜像,和LeetCode第101题:101.对称二叉树是同一道题。解......
  • 【剑指Offer】59、按之字形顺序打印二叉树
    【剑指Offer】59、按之字形顺序打印二叉树题目描述:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解题思路:这道题仍然是二叉树的遍历,相当于层次遍历,可以和第22题:从上往下打印二......
  • 剑指 Offer 37. 序列化二叉树(困难)
    题目:classCodec{public:voidrserialize(TreeNode*root,string&str){//编码递归函数:将树按照前序遍历,放入str字符串中。每个节点元素用','分隔if(root==nullptr){//如果遇到空节点,写入"none"。str+="none,";}el......