![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode递归
文章平均质量分 54
岗岗ganggang
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 33. 二叉搜索树的后序遍历序列python
题目描述:题解:1.二叉搜索树的性质是:左子树的值都小于根节点,右子树的值都大于根节点。后续遍历结果的最后一个数字为根结点的数值。2.定义函数helper,判断输入nums数组是否为二叉搜索树的后续遍历结果,根结点值rootval为nums[-1],从nums第一个数开始,找到第一个大于rootval的nums[i],如果nums是二叉搜索树的后序遍历,nums[i]之后对应root的右子树,节点值应该比rootval大,因此如果找到一个nums[j](j>i)的值小于rootval.原创 2021-12-14 10:11:55 · 375 阅读 · 0 评论 -
leetcode 剑指 Offer 16. 数值的整数次方 python
题目描述:题解:普通递归超时,使用快速幂mypow(x,n)=mypow(x,n//2)**2如果n为偶数mypow(x,n)=mypow(x,n//2)**2*x如果n为奇数mypow(x,n)=mypow(1/x,-n)如果n为负数class Solution: def myPow(self, x: float, n: int) -> float: if n==0: return 1 if n==1:原创 2021-12-13 16:12:29 · 121 阅读 · 0 评论 -
leetcode 剑指 Offer 68 - II. 二叉树的最近公共祖先python
题目描述:题解:与剑指 Offer 68 - I. 二叉搜索树的最近公共祖先python_ganggang的博客-CSDN博客差别在于不是二叉搜索树,但思路仍然是判断p q分别位于root左右哪个子树。1.如果root为空,返回None,如果输入root值与p或者q的节点值相等,则返回root。2.分别对root的左右子树调用lowestCommonAncestor。class Solution(object): def lowestCommonAncestor(self,原创 2021-12-12 18:33:36 · 513 阅读 · 0 评论 -
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先python
题目描述:题解:利用二叉搜索树的性质1.如果当前root比输入p q节点值都要大,说明p,q和其共同祖先都在root.left2.如果当前root比输入p q节点值都要小,说明p,q和其共同祖先都在root.right3.否则root则为p q的公共祖先class Solution(object): def lowestCommonAncestor(self, root, p, q): if root==None: return .原创 2021-12-12 11:39:47 · 414 阅读 · 0 评论 -
leetcode 剑指 Offer 64. 求1+2+…+n python
题目描述:题解:递归1.如果输入n=1,则返回n。2.否则对n-1递归调用sumNums,然后返回其结果加n。class Solution(object): def sumNums(self, n): if n==1: return 1 else: return self.sumNums(n-1)+n...原创 2021-12-12 10:59:01 · 145 阅读 · 0 评论 -
leetcode 117. 填充每个节点的下一个右侧节点指针 II python
题目描述:题解一:层序遍历 通过1.对二叉树进行层序遍历(通过借助队列实现),将各个节点按照层序遍历结果保存在list中。2.将每层层序遍历结果中除了最后一个节点的next设置为当前层下一个节点,最后一个节点的next设置为None。class Solution(object): def connect(self, root): noderes = [] layers = [] if root==None: ..原创 2021-11-30 15:56:59 · 671 阅读 · 0 评论 -
leetcode 面试题 08.05. 递归乘法python
题目描述:题解:1.在一个while循环内用加法求解。2.提前比较A和B,用较小的值做循环。class Solution(object): def multiply(self, A, B): num1 = min(A,B) num2 = max(A,B) result = 0 while num1>0: result=result+num2 num1=num1.原创 2021-11-30 11:16:35 · 140 阅读 · 0 评论 -
leetcode 剑指 Offer 26. 树的子结构 python
题目描述:题解一:未通过这道题可以使用递归的方法解决:1.递归终止条件:如果输入A或B为空子树,return false。2.递归返回值:当前A节点是否包含和B相同结构的子树。3.当前递归:<1>判断A.val是否等于B.val,如果相等,分别判断A B左右子树是否相等(需要考虑B子树是否为空)<2>如果A.val!=B.val,分别将A左右子树与B比较。class Solution(object): def isSubStruct.原创 2021-11-30 09:30:46 · 190 阅读 · 0 评论 -
leetcode 700. 二叉搜索树中的搜索 python
题目描述:题解:递归利用二叉搜索树性质:左子树节点值小于当前节点,右子树节点值大于当前节点。1.如果root为空,返回None,为递归终止条件。2.递归返回值:值等于val的节点的子树。3.当前次递归:如果root.val=val,返回root,如果root.val>val,对左子树递归调用,如果root.val<val,对右子树递归调用。class Solution(object): def searchBST(self, root, val): .原创 2021-11-26 09:49:18 · 70 阅读 · 0 评论 -
leetcode 206. 反转链表 python
题目描述:题解:class Solution(object): def reverseList(self, head): if head==None or head.next==None: return head pre = None cur = head nxt = cur.next while nxt: cur.next = pre ..原创 2021-09-17 20:06:15 · 120 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表python
题目描述:题解一:通过思路:1.从head节点开始遍历链表,把每个节点的值保存在数组numres中。2.反转numsres,作为返回结果。class Solution(object): def reversePrint(self, head): numres = [] while head: numres.append(head.val) head = head.next nu.原创 2021-11-25 09:19:03 · 517 阅读 · 0 评论 -
leetocde199. 二叉树的右视图python
题目描述:题解:递归参考了评论区的思路1.递归终止条件:输入root节点为空。2.递归返回值:保存右侧节点值的列表。3.当前轮递归:判断输入root节点是否为当前层最右侧的节点,如果是就加入列表。否则对root的右子节点和左子节点递归调用。class Solution(object): def rightSideView(self, root): rightres = [] depth = 0 def repeat..原创 2021-11-22 14:58:48 · 236 阅读 · 0 评论 -
leetcode 559. N 叉树的最大深度 python
题目描述:题解:递归题目中节点的子节点用list表示。1.递归终止条件:输入root节点为空,返回0的深度,如果root不存在子节点,返回1的深度。2.递归返回值:当前节点的最大深度。3.当前次递归:当前节点最大深度=所有子节点中的最大深度+1.class Solution(object): def maxDepth(self, root): depth = 0 if root==None: return ..原创 2021-11-21 11:07:59 · 367 阅读 · 0 评论 -
leetcode 397. 整数替换 python
题目描述:题解:递归1.终止条件:输入n=1,不需要调整return 02.递归返回值:将n变为1需要调整次数3.当前次递归:如果n为偶数,返回n/2的转换次数+1 如果n为奇数,返回n+1和n-1需要次数的最小值+1class Solution(object): def integerReplacement(self, n): if n==1: return 0 ...原创 2021-11-19 10:04:48 · 395 阅读 · 0 评论 -
leetcode 83. 删除排序链表中的重复元素python
题目描述:题解:1.将链表中不重复的数值保存在list nums中。2.对nums中的元素构造链表。class Solution(object): def deleteDuplicates(self, head): if head==None: return head nums = [] while head!=None: if head.val not in nums:原创 2021-09-16 21:01:51 · 166 阅读 · 0 评论 -
leetcode 654. 最大二叉树 python
题目描述:题解:递归1.递归终止条件:输入nums为空,返回None2.递归返回值:构造完成的root3.当前次递归需要完成:<1>从输入的nums找到最大值作为root.val<2>将最大值之前的nums元素构造root.left<3>将最大值之后的nums元素构造root.rightclass Solution(object): def constructMaximumBinaryTree(self, num...原创 2021-11-18 17:15:31 · 582 阅读 · 0 评论 -
leetcode 226. 翻转二叉树 python
题目描述:题解:递归1.递归终止条件:输入节点root为空,返回root。2.递归返回值:完成了翻转的root3.当前层的任务(只考虑一个root和其left right子树)root新左子树是翻转后的原右子树root新右子树是翻转后的原左子树class Solution(object): def invertTree(self, root): if root==None: return root lef.原创 2021-11-18 16:41:12 · 555 阅读 · 0 评论 -
leetcode111. 二叉树的最小深度python
题目描述:题解:采用DFS方法:DFS对二叉树从根节点开始搜索,根结点位置depth为1列表depthlist保存叶子结点对应的depth然后depth+1在root的左右子节点分别调用DFS函数class Solution(object): def minDepth(self, root): if root is None: return 0 depth = 1 depthlist = []..原创 2021-09-09 16:23:48 · 286 阅读 · 0 评论 -
leetcode101. 对称二叉树python
题目描述:错误解法:最初的想法是对树进行中序遍历,判断得到的结果对应位置是否相同判断是否为镜像对称。比如例子中的第一个树,中序遍历结果为[3,2,4,1,4,2,3],结果除了中间的1之外全部对称,则该树镜像对称。例子中的第二个树,中序遍历结果为[2,3,1,2,3]结果不对称,则该树不是镜像对称。提交之后发现对某些特殊样例无法正确判断,比如测试样例[1,2,2,2,null,2],中序遍历结果为[2,2,1,2,2],结果完全对称,但其实该树不满足镜像对称条件。class Sol原创 2021-09-07 11:15:17 · 218 阅读 · 0 评论 -
leetcode 24. 两两交换链表中的节点 python
题目描述:题解:1.创建一个虚拟头节点fakehead,fakehead.next = head。2.初始时cur = fakehead,每次交换cur.next和cur.next.next两个节点。3.cur = cur.next.next,继续处理之后的两个节点。其中cur.next与cur.next.next的交换过程一个示例如下:此时cur = fakehead,cur.next=1 cur.next.next=21.tmp1 = cur.next=1 t..原创 2021-09-24 15:28:12 · 194 阅读 · 0 评论 -
leetcode 563. 二叉树的坡度 python
题目描述:简单来说,某个节点的坡度等于其左右子树节点值之和的差值。一个树的坡度等于所有节点的坡度值之和。题解:1.定义一个函数calcsum,输入一个节点node,计算node下面所有子节点的值之和(不包含node节点自身的值)2.在finTilt函数中,tilt记录树的坡度值,从root开始,对每个节点的左右子树分别调用calcsum计算子节点之和,差值加入tilt中。class Solution(object): def findTilt(self, ...原创 2021-11-18 10:48:18 · 570 阅读 · 0 评论