首页 > 其他分享 >剑指offer_20230731

剑指offer_20230731

时间:2023-07-31 19:44:07浏览次数:41  
标签:遍历 offer 前序 Offer 二叉树 序列化 20230731 节点

剑指 Offer 07. 重建二叉树

题目说明

输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。

假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

解题思路

可以通过前序遍历的数组获取每个子树的根节点,并在中序遍历的数组中找到根节点对应的位置,然后就可以确定左右子树的长度mid_root - mid_left,当pre_left > pre_right或者pre_left大于等于数组长度时则说明已经结束啦

通过HashMap可以快速定位到子树根节点在数组中对应的位置

剑指 Offer 16. 数值的整数次方

题目说明

实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。

解题思路

快速幂法

快速幂法是一种算法,用于在 O(logn) 的时间复杂度内计算一个数的 n 次幂(aⁿ)。该方法基于指数的二进制表示,并使用了 "平方-乘" 的技术来减少所需的乘法操作数。

其实就是将2^n转换成

image-20230731173629939

从而x不断去乘x,b不断的除以2

while (b > 0) {
    if ((b & 1) == 1) { // 奇数
        res *= x;
    }
    x *= x;
    b >>= 1;
}

剑指 Offer 37. 序列化二叉树

题目说明

请实现两个函数,分别用来序列化和反序列化二叉树。

你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

解题思路

本题采用的是前序遍历的方法进行序列化和反序列化

serialize

要注意开头和结尾是“[”“]”,中间用“,”分隔开

传参是一棵树,在传入参数的时候如果是空直接返回[],其他的就正常的前序遍历,注意空值的时候

deserialize

传进来的同样是[, , ,]的形式,需要去头尾并用split函数进行分割,用i来维护最新的节点,越界则说明树已经完全形成

用队列来维护前序的节点,若节点非空则进入队列并加入当前节点的左树或者右树

标签:遍历,offer,前序,Offer,二叉树,序列化,20230731,节点
From: https://www.cnblogs.com/xccx-0824/p/17594328.html

相关文章

  • C#.NET 国密SM4对称加解密 与JAVA互通 ver:20230731
    C#.NET国密SM4对称加解密与JAVA互通ver:20230731 .NET环境:.NET6控制台程序(.netcore)。JAVA环境:JAVA8,带maven的JAVA控制台程序。 简要解析:1:加密的KEY、明文等输入参数都需要string转byte[],要约定好编码,如:UTF8。2:加密后的输出参数:byte[],在传输时需要转为stri......
  • 剑指 Offer 59 - I. 滑动窗口的最大值(困难)
    题目:classSolution{public:vector<int>maxSlidingWindow(vector<int>&nums,intk){vector<int>result;if(nums.size()==0)returnresult;deque<int>que;//要维护这样一个队列:队列能够自动......
  • 剑指 Offer 09. 用两个栈实现队列(简单)
    题目:classCQueue{public:stack<int>st1;stack<int>st2;CQueue(){}voidappendTail(intvalue){st1.push(value);}intdeleteHead(){if(st1.empty()&&st2.empty())return-1;......
  • 剑指 Offer 58 - I. 翻转单词顺序(简单)(简单个屁!)
    题目:classSolution{public:stringreverseWords(strings){//该方法利用递归栈的逆序将单词逆序stringword;//保存一个完整的单词if(s.empty())returnword;inti=0;while......
  • 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面(简单)
    题目:classSolution{public:vector<int>exchange(vector<int>&nums){for(inti=0,j=nums.size()-1;i<j;i++){if(nums[i]%2==0){//从i前开始,遇到偶数开始处理while(nums[j]%2==0&&am......
  • 剑指offer--二叉树
    第3题:二叉搜索树的第k个节点描述给定一棵结点数为n的二叉搜索树,请找出其中的第k小的TreeNode结点值。返回第k小的节点值即可不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1保证n个节点的值不一样思路递归中序遍历二叉搜索树:左子树的元素都小于根节点,右......
  • 13个offer,8家SSP,谈谈我的秋招经验
    公众号“夕小瑶的卖萌屋”,专业带逛互联网算法圈的神操作-----》我是传送门关注后,回复以下口令:回复【789】:领取深度学习全栈手册(含NLP、CV海量综述、必刷论文解读)回复【入群】:加入卖萌屋深度学习/NLP/CV/搜广推等方向的技术交流与内推社群(大V、顶会审稿人云集)回复【0511】:领取算法......
  • 剑指offer_20230723
    剑指Offer50.第一个只出现一次的字符题目说明在字符串s中找出第一个只出现一次的字符。如果没有,返回一个单空格。s只包含小写字母。解题思路1:HashMap使用传统的HashMap,对整一个数组进行遍历,更新记录每个字母的出现次数。在遍历结束之后重新遍历一遍数组,获取每个字母对......
  • 剑指 Offer 35. 复杂链表的复制
    题目:/*//DefinitionforaNode.classNode{public:intval;Node*next;Node*random;Node(int_val){val=_val;next=NULL;random=NULL;}};*/classSolution{public:Node*copyRandomList(N......
  • 剑指 Offer 18. 删除链表的节点
    题目:(有改动和陷阱,不可以使用delete否则报错!!)classSolution{public:ListNode*deleteNode(ListNode*head,intval){ListNode*fhead=newListNode(0);#设置虚拟头节点fhead->next=head;ListNode*cur=fhead;while(cur-......