Binary Tree
Binary Tree
野生程序猿RW
2020年毕业于台湾科技大学(Taiwan Tech),后端开发工程师一枚。
展开
-
面试题 04.06. 后继者(BST)
面试题 04.06. 后继者设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。如果指定节点没有对应的“下一个”节点,则返回null。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */c原创 2022-05-16 21:23:37 · 174 阅读 · 0 评论 -
1305. 两棵二叉搜索树中的所有元素
1305. 两棵二叉搜索树中的所有元素归并排序/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode l原创 2022-05-01 14:00:00 · 400 阅读 · 0 评论 -
386. Lexicographical Numbers
386. Lexicographical NumbersGiven an integer n, return all the numbers in the range [1, n] sorted in lexicographical order.You must write an algorithm that runs in O(n) time and uses O(1) extra space.Example 1:Input: n = 13Output: [1,10,11,12,13,2,3,4原创 2022-04-18 21:38:38 · 200 阅读 · 2 评论 -
653. 两数之和 IV - 输入 BST
653. 两数之和 IV - 输入 BST给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。DFSclass Solution { Set<Integer> set = new HashSet<Integer>(); public boolean findTarget(TreeNode root, int k) { if (root == null) {原创 2022-03-21 18:45:48 · 296 阅读 · 0 评论 -
606. 根据二叉树创建字符串
606. 根据二叉树创建字符串你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode原创 2022-03-19 21:42:52 · 47 阅读 · 0 评论 -
590. N 叉树的后序遍历
590. N 叉树的后序遍历给定一个 n 叉树的根节点 root ,返回 其节点值的 后序遍历 。n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。递归思路比较简单,NN 叉树的前序遍历与二叉树的后序遍历的思路和方法基本一致,可以参考「145. 二叉树的后序遍历」的方法,每次递归时,先递归访问每个孩子节点,然后再访问根节点即可。输入:root = [1,null,3,2,4,null,5,6]输出:[5,6,3,2,4,1]/*// Definiti原创 2022-03-12 22:08:26 · 825 阅读 · 0 评论 -
剑指 Offer 33. 二叉搜索树的后序遍历序列(单调栈)
剑指 Offer 33. 二叉搜索树的后序遍历序列输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5 / \ 2 6 / \ 1 3示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: trueclass Solution { public boolean ver原创 2022-02-22 23:47:18 · 56 阅读 · 0 评论 -
543. 二叉树的直径
543. 二叉树的直径给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者[5,2,1,3]。/** * Definition for a binary tree node. * public class原创 2022-02-22 14:33:38 · 136 阅读 · 0 评论 -
700. 二叉搜索树中的搜索
700. 二叉搜索树中的搜索给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \ 1 3和值: 2你应该返回如下子树: 2 / \ 1 3在上述示例中,如果要找的值是5,但因为没有节点值为 5,我们应该返回 NULL。clas原创 2021-11-27 19:45:57 · 130 阅读 · 0 评论 -
559. N 叉树的最大深度
N 叉树的最大深度给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。输入:root = [1,null,3,2,4,null,5,6]输出:3/*// Definition for a Node.class Node { public int val; public List<Node> children; public Node() {} public Node(int _val) { .原创 2021-11-21 22:21:53 · 354 阅读 · 0 评论 -
563. 二叉树的坡度
563. 二叉树的坡度给定一个二叉树,计算 整个树 的坡度 。一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。整个树 的坡度就是其所有节点的坡度之和。示例 1:输入:root = [1,2,3]输出:1解释:节点 2 的坡度:|0-0| = 0(没有子节点)节点 3 的坡度:|0-0| = 0(没有子节点)节点 1 的坡度:|2-3| = 1(左子树就是左原创 2021-11-18 17:05:47 · 167 阅读 · 0 评论 -
230. 二叉搜索树中第K小的元素
230. 二叉搜索树中第K小的元素给定一个二叉搜索树的根节点root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。输入:root = [3,1,4,null,2], k = 1输出:1/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * T原创 2021-10-17 21:08:42 · 128 阅读 · 0 评论 -
987. 二叉树的垂序遍历
987. 二叉树的垂序遍历给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。对位于 (row, col)的每个结点而言,其左右子结点分别位于 (row + 1, col - 1)和 (row + 1, col + 1) 。树的根结点位于(0, 0)。二叉树的 垂序遍历 从最左边的列开始直到最右边的列结束,按列索引每一列上的所有结点,形成一个按出现位置从上到下排序的有序列表。如果同行同列上有多个结点,则按结点的值从小到大进行排序。返回二叉树的 垂序遍历 序列。输入:root原创 2021-08-01 00:16:39 · 65 阅读 · 0 评论 -
1104. 二叉树寻路
1104. 二叉树寻路在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途经的节点标号所组成的。示例 1:输入:label = 14输出:[1,3,4,14]示例 2:输入:label =原创 2021-07-29 22:20:10 · 81 阅读 · 0 评论 -
863. 二叉树中所有距离为 K 的结点
863. 二叉树中所有距离为 K 的结点给定一个二叉树(具有根结点root), 一个目标结点 target ,和一个整数值K。返回到目标结点target距离为K的所有结点的值的列表。 答案可以以任何顺序返回。示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2输出:[7,4,1]解释:所求结点为与目标结点(值为 5)距离为 2 的结点,值分别为 7,4,以及 1注意,输入的 “root” 和 “target” 实原创 2021-07-29 01:55:10 · 85 阅读 · 0 评论 -
671. 二叉树中第二小的节点
671. 二叉树中第二小的节点给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。更正式地说,root.val = min(root.left.val, root.right.val)总成立。给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出-1。示例 1:输入:root = [2,2,5,null,null,5,7]输出:5解释:最小的值是 2 ,第原创 2021-07-28 02:21:26 · 97 阅读 · 0 评论 -
剑指 Offer 37. 序列化二叉树
剑指 Offer 37. 序列化二叉树请实现两个函数,分别用来序列化和反序列化二叉树。你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示:输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。示例:输入:root = [1,2,3,null,null,4原创 2021-06-30 22:55:02 · 50 阅读 · 2 评论 -
872. 叶子相似的树
872. 叶子相似的树请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。示例 1:输入:root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,原创 2021-05-10 10:07:26 · 37 阅读 · 1 评论 -
二叉树之层序遍历及其应用
102. 二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]// DFS思想class Solution { public List<List<Integer>> levelOrder(原创 2020-10-15 22:05:08 · 466 阅读 · 0 评论 -
遍历树的各种操作
遍历树原创 2020-10-12 12:03:55 · 154 阅读 · 0 评论 -
701. 二叉搜索树中的插入操作
701. 二叉搜索树中的插入操作给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。例如,给定二叉搜索树: 4 / \ 2 7 / \ 1 3和 插入的值: 5你可以返回这个二叉搜索树: 4原创 2020-09-30 11:25:18 · 104 阅读 · 0 评论 -
二叉树的前中后遍历、正和逆序层次遍历、Z遍历
235. 二叉搜索树的最近公共祖先给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 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 =原创 2020-09-27 20:26:36 · 967 阅读 · 0 评论 -
111. 二叉树的最小深度
111. 二叉树的最小深度给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.DFS首先可以想到使用深度优先搜索的方法,遍历整棵树,记录最小深度。对于每一个非叶子节点,我们只需要分别计算其左右子树的最小叶子节点深度。这样就将一个大问题转化为了小问题原创 2020-08-21 10:48:58 · 403 阅读 · 0 评论 -
109. 有序链表转换二叉搜索树
109. 有序链表转换二叉搜索树给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5BST的中序遍历是升序的,因此本题等同于根据中原创 2020-08-19 12:44:21 · 194 阅读 · 0 评论 -
108.将有序数组转换为二叉搜索树
将有序数组转换为二叉搜索树将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5class Solution { public TreeNode sorted原创 2020-08-19 12:41:37 · 138 阅读 · 0 评论