![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树
BlackMan_阿伟
不积跬步无以至千里
展开
-
May——872. 叶子相似的树
# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def leafSimilar(self, root1: TreeNode, ro...原创 2021-05-06 15:46:59 · 65 阅读 · 0 评论 -
April——897.递增顺序搜索树
# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def increasingBST(self, root: TreeNode) -...原创 2021-04-25 09:49:56 · 85 阅读 · 0 评论 -
March——331.验证二叉树的前序序列化
class Solution: def isValidSerialization(self, preorder: str) -> bool: #叶子的节点书总是比非叶子节点数多一 degree = 1 for node in preorder.split(','): if degree==0: return False #如果是#入度是1,出度是0,当前度为-1...原创 2021-03-12 09:43:21 · 96 阅读 · 0 评论 -
February——剑指 Offer 33. 二叉搜索树的后序遍历序列
class Solution: def verifyPostorder(self, postorder: List[int]) -> bool: #如果为空或者长度是1,返回True if not postorder or len(postorder)==1: return True #找到根节点 root = postorder[-1] #找到左右子树的临界...原创 2021-02-05 17:43:32 · 85 阅读 · 0 评论 -
《Leetcode of November》222.完全二叉树的节点个数
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def countNodes(self, root: TreeNode) -> int: if not root: ...原创 2020-11-24 10:08:19 · 152 阅读 · 0 评论 -
《Leetcode of October 》124. 二叉树中的最大路径和
# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def maxPathSum(self, root: TreeNode) ->...原创 2020-10-29 21:30:48 · 74 阅读 · 0 评论 -
《Leetcode of October 》129. 求根到叶子节点数字之和
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def sumNumbers(self, root: TreeNode) -> int: if not root: ...原创 2020-10-29 15:52:22 · 90 阅读 · 0 评论 -
199.二叉树的右视图
思路:右侧的节点就是每一层的最后一个元素,所以采用BFS算法,把每一次的最后一个节点加入到结果列表中即可。需要初始化一个队列,这个而且放入队列的顺序是先左在右.那么最后一个元素必定是右侧节点值。# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self...原创 2020-04-22 17:31:35 · 78 阅读 · 0 评论 -
《Leetcode of October》530.二叉搜索树的最小绝对差
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def getMinimumDifference(self, root: TreeNode) -> int: def ...原创 2020-10-12 16:01:03 · 99 阅读 · 0 评论 -
《Leetcode of September 》538. 把二叉搜索树转换为累加树
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def convertBST(self, root: TreeNode) -> TreeNode: ...原创 2020-09-30 16:16:48 · 84 阅读 · 0 评论 -
《Leetcode of September 》617. 合并二叉树
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def mergeTrees(self, t1: TreeNode, t2: TreeNode) -> TreeNode: ...原创 2020-09-30 15:10:50 · 59 阅读 · 0 评论 -
《Leetcode of September 》700. 二叉搜索树中的搜索
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def searchBST(self, root: TreeNode, val: int) -> TreeNode: ...原创 2020-09-30 14:36:26 · 94 阅读 · 0 评论 -
《Leetcode of September 》701. 二叉搜索树中的插入操作
# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def insertIntoBST(self, root: TreeNode, v...原创 2020-09-30 14:30:51 · 76 阅读 · 0 评论 -
《Leetcode of September 》106. 从中序与后序遍历序列构造二叉树
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def buildTree(self, inorder: List[int], postorder: List[int]) ->...原创 2020-09-29 10:30:37 · 103 阅读 · 0 评论 -
《Leetcode of September 》113. 路径总和 II
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:...原创 2020-09-28 20:58:31 · 68 阅读 · 0 评论 -
《Leetcode of September 》116. 填充每个节点的下一个右侧节点指针
class Solution(object): def connect(self, root): """ :type root: Node :rtype: Node """ if not root: return root pre = root # 循环条件是当前节点的left不为空,当只有根节点 # 或所有叶子节点都出串联完后循环就退出了 while pre.left: tmp = pre while tmp: # 将tmp的左右...原创 2020-09-28 11:36:56 · 138 阅读 · 0 评论 -
《Leetcode of September 》117. 填充每个节点的下一个右侧节点指针 II
"""# Definition for a Node.class Node: def __init__(self, val: int = 0, left: 'Node' = None, right: 'Node' = None, next: 'Node' = None): self.val = val self.left = left self.right = right self.next = next"""cl...原创 2020-09-28 11:32:44 · 100 阅读 · 0 评论 -
《Leetcode of September 》404. 左叶子之和
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def sumOfLeftLeaves(self, root: TreeNode) -> int: self.r...原创 2020-09-19 19:40:38 · 110 阅读 · 0 评论 -
《Leetcode of September 》257.二叉树所有路径
采用两个方法去解决:1、DFS(其实就是回溯算法)2、BFS (相当于把所以节点显示的枚举出来)# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def binaryTre.原创 2020-09-04 15:25:12 · 120 阅读 · 0 评论 -
二叉树的自底向上遍历+hash表:508.出现次数最多的子树元素和
题目链接:508.出现次数最多的子树元素和# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def findFrequentTreeSum(self, root: TreeN.原创 2020-08-19 17:20:28 · 155 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构
题目链接:树的子结构这个截图来自题解区,我觉得画的比较好,就没有画直接借鉴的,链接如下:https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/solution/mian-shi-ti-26-shu-de-zi-jie-gou-xian-xu-bian-li-p/# Definition for a binary tree node.# class TreeNode:# def __init__(self, x..原创 2020-08-19 16:40:26 · 92 阅读 · 0 评论 -
中序遍历构建AVL树:109.有序链表转换二叉搜索树
题目链接:109.有序链表转换二叉搜索树画图表示一下:# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = next# Definition for a binary tree node.# class TreeNode:# def __i.原创 2020-08-18 21:19:01 · 324 阅读 · 0 评论 -
二叉树的迭代排序:230. 二叉搜索树中第K小的元素
题目链接:230.二叉搜索树的第K小的元素两个做法:一个是递归,一个是迭代;# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: .原创 2020-08-18 11:32:48 · 96 阅读 · 0 评论 -
中序遍历的迭代法:173. 二叉搜索树迭代器
题目链接:173. 二叉搜索树迭代器# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass BSTIterator: def __init__(self, root: TreeNode): se原创 2020-08-18 11:15:39 · 138 阅读 · 0 评论 -
二叉树的三种遍历:前序遍历、后序遍历、中序遍历
题目链接:145.二叉树的后序遍历94.二叉树的中序遍历144.二叉树的前序遍历1、后序遍历主要想说这个题目和N叉树一样,用了一个迭代的方法去解决。二叉树的后续是左、右、根。利用栈的数据结构,进行根、右、左的遍历。然后把最终遍历的结果进行反转就可以了。# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x#原创 2020-08-17 22:24:16 · 448 阅读 · 0 评论 -
N叉树的三种遍历:层次遍历、前序遍历、后序遍历
题目链接:1、层次遍历"""# Definition for a Node.class Node: def __init__(self, val=None, children=None): self.val = val self.children = children"""class Solution: def levelOrder(self, root: 'Node') -> List[List[int]]: .原创 2020-08-17 21:16:53 · 4063 阅读 · 0 评论 -
层次遍历模板的应用之:111.二叉树的最小深度
题目链接:111.二叉树的最小深度1、题目分析最小深度和最大深度是刚好反着来的,注意一点:最小深度是跟节点到叶子节点的深度,如果根节点的左子树或者右子树为空,那么左右子树为空的时候根本不符合题目要求,因此必做一个筛选。两个方法:①递归②层次遍历2、解题分析递归 如果左子树为空就直接遍历右子树 如果右子树为空就直接遍历左子树 如果都不为空,比较两个取最小值+1即可 遍历 BFS模板 使用一个临时变量去记录深度 如果一个节点的左右子树都为空,就返回当前深度 3、代码原创 2020-08-17 15:34:37 · 198 阅读 · 0 评论 -
99.恢复二叉搜索树
二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。示例1:输入: [1,3,null,null,2] 1 /3 \ 2输出: [3,1,null,null,2] 3 /1 \ 2示例2:输入: [3,1,4,null,null,2] 3 / \1 4 / 2输出: [2,1,4,null,null,3] 2 / \1 4 / 31、题目分析二叉搜...原创 2020-08-08 12:19:12 · 217 阅读 · 0 评论 -
判断两个二叉树是否相同的模板:100.相同的树
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 / \ 2 2.原创 2020-08-08 11:16:31 · 229 阅读 · 0 评论 -
剑指 Offer 34. 二叉树中和为某一值的路径
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[ [5,4,11,2], [.原创 2020-08-06 16:41:18 · 75 阅读 · 0 评论 -
剑指 Offer 68 - II. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树:root =[3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5...原创 2020-08-04 17:24:16 · 73 阅读 · 0 评论 -
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树:root =[6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6 ...原创 2020-08-03 19:12:42 · 75 阅读 · 0 评论 -
中序遍历二叉搜索树:剑指 Offer 54. 二叉搜索树的第k大节点
给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1输出: 41、题目分析首先明白什么是二叉搜索树,这个树的特点就是每个节点的左子树小于根节点,右子..原创 2020-08-02 18:52:01 · 155 阅读 · 0 评论 -
非原地操作:114.二叉树展开为链表
给定一个二叉树,原地将它展开为一个单链表。例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 61、题目分析将一个二叉树给它拆开,拆成链表。其实这个题目要求是原地操作,也就是时间复杂度是O(1)。但是原地操作我没看明白,所以用了一个O(n)的方法去解决这个问题。可以进行先序...原创 2020-08-02 17:37:56 · 144 阅读 · 0 评论 -
AVL:剑指 Offer 55 - II. 平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \ 4 4原创 2020-08-02 16:04:24 · 132 阅读 · 0 评论 -
镜像二叉树:剑指 Offer 27. 二叉树的镜像
请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入:4/ \2 7/ \ / \1 3 6 9镜像输出:4/ \7 2/ \ / \9 6 31示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]1、题目分析什么是镜像二叉树,就是交换每一个节点的左右子树,重构的二叉树就称之为原二叉树的镜像。遇到树的问题,两种解法...原创 2020-07-29 21:21:14 · 90 阅读 · 0 评论 -
二叉树的遍历:104.二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 71、题目分析题目比较简单,就是求一个二叉树的最大深度。二叉树的深度是从根节点到叶子节点的最大层数。所以想到两个方法:1、递归的遍历左右两个二叉树;2、采用层次遍历的方法;记录访问的层数,就是二叉树的最大深度。2、..原创 2020-07-28 16:15:23 · 191 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 71、题目分析在学习数据结构的时候,我们都知道前序+中序 or 后序+中序都能确定一个二叉树。这个题目给定前序和中序的结果让我们去重建一个二叉树,那当然是原创 2020-07-08 16:28:08 · 85 阅读 · 0 评论 -
《Leetcode》112. 路径总和
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明:叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和sum = 22 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1返回true, 因为存在目标...原创 2020-07-07 17:33:52 · 87 阅读 · 0 评论 -
《Leetcode》108. 将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 51、题目分析这个题需要一点数据结构的知识,首先什么是二叉搜索树,其次什么是二叉搜索树。只有明白这.原创 2020-07-03 11:15:02 · 178 阅读 · 0 评论