leetcode树
文章平均质量分 55
岗岗ganggang
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 37. 序列化二叉树python
题目描述:题解:参考:力扣二叉树的前 中 后序遍历对应的二叉树不唯一,完整表示二叉树需要把null空节点也记录。二叉树的序列化:借助队列1.创建一个队列queue,初始时只有root节点,创建一个list,初始为空,保存序列化结果。2.每次取出队列中第一个节点node,判断node是否为空节点,如果不是则将node.val加入result,然后将node的左右子节点加入队列,如果node为空节点,则直接在result中添加null。以题目示例中的二叉树为例:...原创 2021-12-23 16:17:52 · 869 阅读 · 0 评论 -
剑指 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 · 392 阅读 · 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 · 562 阅读 · 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 · 460 阅读 · 0 评论 -
剑指 Offer 36. 二叉搜索树与双向链表python
题目描述:题解:参考力扣二叉搜索树的中序遍历结果就是按找从小到大排列,在对二叉搜索树进行中序遍历的同时,确定left right指针位置。1.创建一个pre节点,初始化为None。2.定义dfs函数,输入cur节点:<1>对cur.left调用dfs。<2>处理cur节点,如果此时pre为None,说明当前cur为head节点,将cur保存在head中。 否则,pre为cur在生成的链表中的前一个节点,pre.right=cur cu...原创 2021-12-08 20:58:36 · 123 阅读 · 0 评论 -
剑指 Offer 54. 二叉搜索树的第k大节点python
题目描述:题解一:二叉搜索树的中序遍历结果是各节点值从小到大排列1.定义一个midsort函数,保存二叉搜索树的中序遍历结果在一个数组中。2.返回数组的第k大的值。class Solution: def kthLargest(self, root: TreeNode, k: int) -> int: def midsort(root,result): if root==None: return .原创 2021-12-08 10:23:20 · 77 阅读 · 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 · 703 阅读 · 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 · 203 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III python
题目描述:题解:在上一题基础上改进剑指 Offer 32 - I. 从上到下打印二叉树python java_ganggang的博客-CSDN博客1.增加一个layernum记录当前层数,判断应该按照从左到右还是从右到左的顺序。2.在将保存该层节点val的数组reslayer添加到noderes时,判断layernum的奇偶。本来计划在向队列中添加新节点的时候,根据layernum判断应该先添加节点坐子节点还是右子节点,但是根据题目的要求,不止在添加子节点的时候要区分,还要考虑从该.原创 2021-11-29 16:52:00 · 302 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II python
题目描述:题解:和上一题剑指 Offer 32 - I. 从上到下打印二叉树python java_ganggang的博客-CSDN博客类似,只是在每层遍历的时候先放在一个list中。class Solution(object): def levelOrder(self, root): nodeque = [] noderes = [] if root==None: return noderes .原创 2021-11-29 16:19:32 · 226 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树python java
题目描述:题解:1.创建一个nodeque(用list表示),记录搜索节点,初始只有root一个节点,用noderes记录最终结果。2.每次取出nodeque中的第一个节点node,将node.val加入noderes。如果node左子节点存在,将左子节点加入nodeque,如果右子节点存在将其加入nodeque,然后从nodeque中删除node节点.class Solution(object): def levelOrder(self, root): nod原创 2021-11-29 15:53:04 · 498 阅读 · 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 · 80 阅读 · 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 · 276 阅读 · 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 · 383 阅读 · 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 · 640 阅读 · 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 · 564 阅读 · 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 · 618 阅读 · 0 评论 -
leetcode 116. 填充每个节点的下一个右侧节点指针python
题目描述:题解:1.如果root为空则直接返回,如果root.left为空,则表示当前已经到叶子结点,也直接返回。2.root左子节点的next为root的右子节点,root右子节点的next为root的next节点的左子节点。3.对root左右子树递归调用。class Solution(object): def connect(self, root): if root is None or root.left is None: .原创 2021-10-09 21:08:54 · 127 阅读 · 0 评论 -
leetcode 617. 合并二叉树 python
题目描述:题解:1.如果当前位置两个二叉树的节点都非空,则将root1.val更新为root1.val和root2.val之和。2.如果当前位置只存在root1或root2,则直接返回即可。3.然后在对左右子树递归调用。class Solution(object): def connect(self, root): if root is None or root.left is None: return None r.原创 2021-10-09 21:02:30 · 291 阅读 · 0 评论 -
leetcode95. 不同的二叉搜索树 II python
题目描述:题解:<1>1-n范围内的任何i值可以作为根节点。<2>1-i-1作为左子树,i+1-n作为右子树。1.构造函数generateBST(start,end)返回由start-end组成的所有BST: 选择start-end中一个值i作为根结点。 调用generate(start,i-1)返回所有左子树组合,调用generate(i+1,end)返回所有右子树组合。 i作为根结点,generate(start,i-1)中选择一种作为...原创 2021-09-13 16:07:32 · 132 阅读 · 0 评论 -
leetcode96. 不同的二叉搜索树python
题目描述:题解:关键:在输入的n个节点中,可以选择第i个作为根节点,前1-i-1个节点作为左子树,i+1-n个节点作为右子树。所以当选择i作为根节点时,左子树有i-1个节点,右子树有n-i个节点。用G(i)表示i个节点可以构成的BST数量。f(i)表示以i为根结点的子树数量,f(i)=G(i-1)*G(n-1)G(n)=f(1)+f(2)+...+f(n)=G(0)*G(n-1)+G(1)*G(n-2)+...+G(n-1)*G(0)class Solution(objec..原创 2021-09-11 17:07:31 · 157 阅读 · 0 评论 -
leetcode108. 将有序数组转换为二叉搜索树python
题目描述:题解:从有序数列恢复BST的关键是:有序数列nums的中间位置是根结点,其左边为左子树,右边为右子树。1.确定nums的中间元素为root,rootidx = len(nums)//22.构造根节点root = TreeNode(nums[rootidx])3.对rootidx左边和右边的序列分别递归调用函数。class Solution(object): def sortedArrayToBST(self, nums): i...原创 2021-09-11 11:13:39 · 96 阅读 · 0 评论 -
leetcode98. 验证二叉搜索树python
题目描述:题解:二叉搜索树的性质是:任何一个节点的左子树中的所有节点值都小于该节点值,其右子树中所有节点值都大于当前节点值(必须满足,节点值相等也不行)。二叉搜索树的中序遍历结果是一个升序序列。1.首先对二叉搜索树进行中序遍历,保存结果midorder2.判断midorder是否满足升序。注意:本来利用sorted将midorder进行排序,对比midorder和sorted后结果是否完全相同,但这种方法不适用于有相同节点值的情况。class Solution(obj...原创 2021-09-11 10:39:55 · 236 阅读 · 0 评论 -
leetcode99. 恢复二叉搜索树python
题目描述:题解:二叉搜索树的特征是任何一个节点的左子树中的所有节点的值都小于当前节点,其右子树中所有节点的值都大于当前节点。二叉搜索树的中序遍历结果应该是一个升序序列。1.定义一个midorder函数,保存二叉树中序遍历结果midorder。2.对midorder内的所有节点按照节点的val值升序排列,得到ordered_list。3.对比midorder和ordered_list,用node_change保存ordered_list和midorder中不同的节点。4.交..原创 2021-09-10 20:44:14 · 158 阅读 · 0 评论 -
leetcode106. 从中序与后序遍历序列构造二叉树
题目描述:题解:和leetcode中105题根据前序和中序遍历结果重构二叉树类似。关键:后序遍历结果的最后一个是二叉树的根节点。确定根节点之后,在中序遍历结果中确定根节点位置,之前的为二叉树左子树,之后的为二叉树的右子树。同时需要根据根节点在中序遍历结果中的位置判断根节点是否有左右子树。class Solution(object): def buildTree(self, inorder, postorder): if len(inorder)==0:原创 2021-09-10 16:20:14 · 158 阅读 · 0 评论 -
leetcode105. 从前序与中序遍历序列构造二叉树python
题目描述:题解:参考:掘金根据前序和中序遍历结果重构二叉树:1.前序遍历结果中第一个为根结点2.根据前序遍历第一个节点确定的根结点值,在中序遍历中找到根节点位置rootidx,中序遍历结果中该位置左边为左子树,右边为右子树。前序遍历结果中preorder[1:rootidx+1]为左子树,preorder[rootidx+1:]为右子树。3.对左右子树递归调用重构函数。class Solution(object): def buildTree(self, preorder.原创 2021-09-10 11:37:21 · 119 阅读 · 0 评论 -
leetcode112. 路径总和python
题目描述:题解:class Solution(object): def hasPathSum(self, root, targetSum): if root==None: return False if root.left==None and root.right==None: return targetSum-root.val==0 return self.hasPathSum(ro.原创 2021-09-10 10:52:30 · 155 阅读 · 0 评论 -
leetcode110. 平衡二叉树python
题目描述:题解:参考:https://blog.csdn.net/qq_17550379/article/details/820815011.定义一个求二叉树深度的函数depth,二叉树深度=max(左子树深度,右子树深度)+12.root=None则返回True。否则分别调用depth函数获取root左右子树的深度,判断是否平衡。3.需要注意的一点是,平衡二叉树左右子树深度差距小于1的要求是对于所有节点而言,不只是根结点,因此当根节点root满足要求之后,对其左右子树递归调...原创 2021-09-09 17:22:22 · 139 阅读 · 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 · 342 阅读 · 0 评论 -
leetcode102. 二叉树的层序遍历python
问题描述:题解:此题的基本是对一个二叉树进行层序遍历。二叉树层序遍历可以通过队列实现:维护一个队列queue(python中通过list实现)和保存遍历结果的list res。<1>如果根节点root不为空,则加入queue,初始化时queue中只有根节点一个。<2>取出queue第一个节点记node<3>将node.val加入res<4>如果node左子节点不为空,加入queue。<5>如果node右子节点不.原创 2021-09-08 15:42:29 · 502 阅读 · 0 评论 -
leetcode104. 二叉树的最大深度python
题目描述:题解:问题的关键是:一个树的最大深度=max(左子树最大深度,右子树最大深度)+1代码:class Solution(object): def maxDepth(self,root): if root==None: return 0 maxdepth_left = self.maxDepth(root.left) maxdepth_right = self.maxDepth(root.right.原创 2021-09-08 15:43:14 · 122 阅读 · 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 · 241 阅读 · 0 评论 -
leetcode100. 相同的树
题目描述:题解:判断两棵树结构是否相同,相同位置是否有相同的值。对两棵树采用同样的方法进行遍历,此处选择前序遍历,search对树采用递归的方法进行前序遍历,遍历结果保存在res中,如果左子树或右子树为空则在res中对应位置添加-1(此题中节点val>0)在isSametree函数中调用search遍历两树,判断结果是否相同。class Solution(object): def search(self,root): res = [] ...原创 2021-08-20 17:42:56 · 76 阅读 · 0 评论 -
leetcode94. 二叉树的中序遍历python
题目描述:题解:中序遍历:访问顺序为:左子树 根结点 右子树采用递归的方法:class Solution(object): def inorderTraversal(self, root): res = [] if root==None: return res res = res+self.inorderTraversal(root.left) res.append(root....原创 2021-08-20 17:03:40 · 71 阅读 · 0 评论 -
leetcode144. 二叉树的前序遍历
题解:二叉树前序遍历,从根节点开始,先读取根节点的值,再依次遍历其左右子树。采用递归的思想:结果保存为result先判断根节点root是否为空,不为空将其值加入result,若左子树不为空则遍历左子树,然后遍历右子树。class TreeNode(object): def __init__(self, val=0, left=None, right=None): self.val = val self.left = le...原创 2021-07-29 17:07:52 · 188 阅读 · 0 评论