
Tree
文章平均质量分 58
Tree
NLP_victor
这个作者很懒,什么都没留下…
展开
-
LeetCode222. 完全二叉树的节点个数(Python)
1、题目描述https://leetcode-cn.com/problems/count-complete-tree-nodes/给出一个完全二叉树,求出该树的节点个数。完全二叉树的定义如下:除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~2h个节点。2、代码详解比较左子树和右子树之间的深度A.如果相等,则表示左子树是完整的二叉树 B.不是,这意味着右边的子树是完整的二叉树#..原创 2020-11-24 16:48:43 · 387 阅读 · 0 评论 -
LeetCode129. 求根到叶子节点数字之和(DFS、BFS)
1、题目描述https://leetcode-cn.com/problems/sum-root-to-leaf-numbers/给定一个二叉树,它的每个结点都存放一个0-9的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明:叶子节点是指没有子节点的节点。输入: [1,2,3] 1 / \ 2 3输出: 25解释:从根到叶子节点路径 1-&...原创 2020-10-29 23:21:34 · 248 阅读 · 0 评论 -
LeetCode116. 填充每个节点的下一个右侧节点指针(O(1)空间)
1、题目描述https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。你只能使用常量级额外空间。 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。2、代码详解完美二叉树,即每一层的节点都是满的。完成后的串联树,其连接的方式有两种:第一种是这两个串原创 2020-10-15 23:45:31 · 299 阅读 · 0 评论 -
LeetCode530. 二叉搜索树的最小绝对差(中序、栈)
1、题目描述https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。树中至少有 2 个节点。2、代码详解中序遍历(利用栈)中序遍历二叉搜索树,第一个结点外的每个节点与其前一节点的差值,如果该值小于最小绝对差,就用它更新最小绝对差(初始可设为无穷)。没有必要取绝对值 abs(cur_val - pre_val), 二.原创 2020-10-12 22:35:10 · 333 阅读 · 0 评论 -
LeetCode701. 二叉搜索树中的插入操作(递归非递归)
1、题目描述https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。(每个节点都有一个唯一整数值,新值和原始二叉搜索树中的任意节点值都不同)注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。2、代码详解原创 2020-09-30 23:02:30 · 418 阅读 · 0 评论 -
LeetCode404. 左叶子之和(Python)
1、题目描述https://leetcode-cn.com/problems/sum-of-left-leaves/2、代码详解递归# Definition for a binary tree node.class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: def su原创 2020-09-20 00:09:23 · 267 阅读 · 0 评论 -
LeetCode637. 二叉树的层平均值(层序遍历)
1、题目描述https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。输入: 3 / \ 9 20 / \ 15 7输出:[3, 14.5, 11]解释:第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。2、代码详解python3的 / 才是正常原创 2020-09-12 23:38:28 · 248 阅读 · 0 评论 -
LeetCode257. 二叉树的所有路径(Python)
1、题目详解https://leetcode-cn.com/problems/binary-tree-paths/给定一个二叉树,返回所有从根节点到叶子节点的路径。说明:叶子节点是指没有子节点的节点。输入: 1 / \2 3 \ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->32、代码描述# Definition for a binary tr.原创 2020-09-04 23:33:55 · 276 阅读 · 0 评论 -
LeetCode103. 二叉树的锯齿形层次遍历(BFS)
1、题目描述https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。返回锯齿形层次遍历[[3], [20,9], [15,7]]2、代码详解层序遍历BFS# Definition for a binary tree node.# class TreeNode(原创 2020-08-30 22:17:36 · 287 阅读 · 0 评论 -
LeetCode110. 平衡二叉树(树的深度)
1、题目描述https://leetcode-cn.com/problems/balanced-binary-tree/给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。2、代码详解最优解:从底至顶(提前阻断)思路是对二叉树做后序遍历,从底至顶返回子树最大高度,若判定某子树不是平衡树则 “剪枝” ,直接向上返回。递归推导递归到最深处返回0,因为叶子节点的左右节点是空;此时ma..原创 2020-08-18 16:32:25 · 537 阅读 · 0 评论 -
LeetCode100. 相同的树(dfs)
1、题目描述https://leetcode-cn.com/problems/same-tree/给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true2、代码详解dfs# Definition for.原创 2020-08-07 23:43:50 · 258 阅读 · 0 评论 -
DFS-LeetCode114. 二叉树展开为链表
1、题目描述https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/给定一个二叉树,原地将它展开为一个单链表。2、代码详解# Definition for a binary tree node.class TreeNode(object): def __init__(self, val=0, left=None, right=None): self.val = val原创 2020-08-02 16:07:25 · 301 阅读 · 0 评论 -
LeetCode199. 二叉树的右视图(BFS)
1、题目描述https://leetcode-cn.com/problems/binary-tree-right-side-view/给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。输入:[1,2,3,null,5,null,4]输出:[1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---2、..原创 2020-07-20 09:31:33 · 371 阅读 · 0 评论 -
LeetCode543. 二叉树的直径
1、题目描述https://leetcode-cn.com/problems/diameter-of-binary-tree/给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。两结点之间的路径长度是以它们之间边的数目表示。2、代码详解红线的直径是8(边数)任意一个结点,都要记录以此结点为根的直径情况:左子树高度+右子树高度需要一个值来保存我这个每次比较更新的最大直径值,用self.ans = 1来原创 2020-07-12 22:58:52 · 260 阅读 · 0 评论 -
LeetCode449. 序列化和反序列化二叉搜索树(前序版序列化)
1、题目描述https://leetcode-cn.com/problems/serialize-and-deserialize-bst/设计一个算法来序列化和反序列化二叉搜索树。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。编码的字符串应尽可能紧凑。2、代码详解序列化:先序遍历序列化 反序列化:因为是BST,所以排序后就是其中序遍历,因此反序列化就转换成了105题的从先序与中序构造二叉树的问题.原创 2020-07-09 22:57:09 · 280 阅读 · 0 评论 -
LeetCode617. 合并二叉树(递归DFS+迭代BFS队列)
1、题目描述https://leetcode-cn.com/problems/merge-two-binary-trees/给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点。注意:合并必须从两个树的根节点开始。2、代码详解递归写法DFS时间复杂度:O(N) ;空间复杂度:O(h)...原创 2020-07-09 20:13:01 · 293 阅读 · 0 评论 -
LeetCode113. 路径总和 II (返回路径列表)
1、题目描述https://leetcode-cn.com/problems/path-sum-ii/给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例: 给定如下二叉树,以及目标和 sum = 22返回[ [5,4,11,2], [5,8,4,5] ]2、代码详解递归# Definition for a binary tree node.class TreeNode(object...原创 2020-07-08 22:54:37 · 294 阅读 · 0 评论 -
LeetCode437. 路径总和 III (等于sum的路径总数)
1、题目描述https://leetcode-cn.com/problems/path-sum-iii/给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点!)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。2、代码详解一次递归,用列表记录下当前结果即可# Definition for a bina原创 2020-07-08 22:21:22 · 331 阅读 · 0 评论 -
LeetCode106. 从中序与后序遍历序列构造二叉树
1、题目描述https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。中序遍历 inorder =[9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3]2、代码详解相同题:105. 从前序与中序遍历序列构造二叉树+剑7:重建二叉树htt...原创 2020-07-08 18:42:37 · 265 阅读 · 0 评论 -
LeetCode124. 二叉树中的最大路径和(DFS)
1、题目描述https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。2、代码详解# Definition for a binary tree node.class TreeNode(object): def __init__(self, x):原创 2020-07-07 23:29:01 · 342 阅读 · 0 评论 -
LeetCode112. 路径总和(DFS)
1、题目描述https://leetcode-cn.com/problems/path-sum/给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树 [5,4,8,11,null,13,4,7,2,null,null,null,1],以及目标和 sum = 22返回true, 因为存在目标和为 22 的根节点到叶子节点的路径5->4->11->2。...原创 2020-07-07 21:40:26 · 241 阅读 · 0 评论 -
LeetCode101. 对称二叉树(递归和迭代)
1、题目描述https://leetcode-cn.com/problems/symmetric-tree/给定一个二叉树,检查它是否是镜像对称的。2、代码详解2.1 递归写法# Definition for a binary tree node.class TreeNode(object): def __init__(self, x): self.val = x self.left = None self.right =原创 2020-07-03 23:35:44 · 385 阅读 · 0 评论 -
LeetCode108. 将有序数组转换为二叉搜索树109. 有序链表转换二叉搜索树
1、题目描述https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树(BST)。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。2、代码详解附:此题提交时必须注释掉class TreeNode类法一:中序遍历,总是选择中间位置左边的数字作为根节点# Definition for .原创 2020-07-03 18:28:26 · 288 阅读 · 0 评论 -
LeetCode95. 不同的二叉搜索树 II
1、题目描述https://leetcode-cn.com/problems/unique-binary-search-trees-ii/给定一个整数 n,生成所有由 1 ... n 为节点所组成的 二叉搜索树 。0 <= n <= 82、代码详解递归法# Definition for a binary tree node.class TreeNode(object): def __init__(self, val=0, left=None, right=No原创 2020-07-01 17:45:46 · 249 阅读 · 0 评论 -
DP-LeetCode96. 不同的二叉搜索树
1、题目描述https://leetcode-cn.com/problems/unique-binary-search-trees/给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?2、代码详解动态规划卡特兰数 公式https://baike.baidu.com/item/卡特兰数G(n)=G(0)∗G(n−1)+G(1)∗G(n−2)+...+G(n−1)∗G(0)class Solution(object): def numTre.原创 2020-07-01 16:34:09 · 278 阅读 · 0 评论 -
LeetCode94. 二叉树的中序遍历、前序144、后序145(栈实现迭代)
144. 二叉树的前序遍历https://leetcode-cn.com/problems/binary-tree-preorder-traversal/# Definition for a binary tree node.class TreeNode(object): def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solutio原创 2020-07-01 13:13:42 · 307 阅读 · 0 评论 -
LeetCode236. 二叉树的最近公共祖先(后序遍历 DFS)
1、题目描述https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/相关题:68-1二叉搜索树的最近公共祖先(剑)LeetCode.235https://blog.csdn.net/IOT_victor/article/details/1046225872、代码详解# Definition for a binary tree node.class TreeNode(object): .原创 2020-06-30 23:02:58 · 365 阅读 · 1 评论 -
树-LeetCode98. 验证二叉搜索树
1、题目描述https://leetcode-cn.com/problems/validate-binary-search-tree/给定一个二叉树,判断其是否是一个有效的二叉搜索树。2、代码详解中序遍历时,判断当前节点是否大于中序遍历的前一个节点,如果大于,说明满足 BST,继续遍历;否则直接返回 false。法二(不推荐):比中序遍历完整棵树后,在判断是否升序更快更省 ,即判断 inorder == list(sorted(set(inorder))# Definition原创 2020-06-30 18:27:23 · 243 阅读 · 0 评论 -
FS-LeetCode111. 二叉树的最小深度
1、题目描述https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。同类题:DFS-LeetCode104. 二叉树的最大深度https://blog.csdn.net/IOT_victor/article/details/1070215172、代码详解递归写法:关键是搞清楚递归...原创 2020-06-29 16:08:10 · 274 阅读 · 0 评论 -
DFS-LeetCode104. 二叉树的最大深度
1、题目描述https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。2、代码详解递归写法(推荐)# Definition for a binary tree node.class TreeNode(object): def __init__(self, x): .原创 2020-06-29 15:45:59 · 316 阅读 · 0 评论 -
68-1:二叉搜索树的最近公共祖先(剑指offer第2版Python)LeetCode.235
1、题目描述给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树:root =[6,2,8,0,4,7,9,null,null,3,5]示例 1:输入...原创 2020-03-02 23:11:35 · 308 阅读 · 0 评论 -
LeetCode297. 二叉树的序列化与反序列化+37:序列化二叉树(剑指offer第2版)
一、题目描述请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种...原创 2020-03-01 22:05:11 · 357 阅读 · 0 评论 -
LeetCode105. 从前序与中序遍历序列构造二叉树+剑7:重建二叉树
1、题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。2、代码详解利用二叉树前序遍历和中序遍历的特性。前序遍历的第一个值一定为根节点,对应于中序遍历中间的一个点。在中序遍历序列中,这个点...原创 2020-02-29 21:43:03 · 306 阅读 · 0 评论 -
BFS-32:从上到下打印二叉树(剑指offer2)102. 二叉树的层序遍历
1、题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。2、代码详解相当于按层遍历, 中间需要队列做转存,引入一个队列即可。推广:有向图的广度优先遍历也是基于队列的。# -*- coding:utf-8 -*-class TreeNode: def __init__(self, x): self.val = x sel...原创 2019-05-31 16:25:19 · 271 阅读 · 0 评论 -
27:二叉树的镜像(剑指offer第2版)LeetCode226. 翻转二叉树
1、题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 ...原创 2019-05-29 19:19:45 · 247 阅读 · 0 评论 -
LeetCode—Python—230. 二叉搜索树中第K小的元素
一、题目描述BST(230):https://leetcode.com/problems/kth-smallest-element-in-a-bst/description/二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子...原创 2019-03-30 12:07:04 · 701 阅读 · 0 评论