二叉树
IDEA_TEYU_1112
其实吧压力也没那么大
展开
-
Leetcode刷题java之124. 二叉树中的最大路径和(一天一道编程题之五十二天)
执行结果:通过显示详情执行用时 :1 ms, 在所有 Java 提交中击败了99.80% 的用户内存消耗 :41.5 MB, 在所有 Java 提交中击败了15.00%的用户题目:给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3]...原创 2020-04-06 15:54:21 · 261 阅读 · 0 评论 -
Leetcode刷题java之208. 实现 Trie (前缀树)(一天一道编程题之四十六天)
执行结果:通过显示详情执行用时 :56 ms, 在所有 Java 提交中击败了47.39% 的用户内存消耗 :49.1 MB, 在所有 Java 提交中击败了100.00%的用户题目:实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.inser...原创 2020-04-03 18:09:18 · 217 阅读 · 0 评论 -
Leetcode刷题java之二叉树的前序中序后续遍历非递归实现(一天一道编程题之二十四天)
前序遍历/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { ...原创 2020-03-15 10:49:31 · 305 阅读 · 0 评论 -
Leetcode刷题java之116. 填充每个节点的下一个右侧节点指针(一天一道编程题之第十七天)
执行结果:通过显示详情执行用时 :3 ms, 在所有 Java 提交中击败了33.48% 的用户内存消耗 :41.1 MB, 在所有 Java 提交中击败了5.06%的用户题目:给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right;...原创 2020-03-08 10:03:43 · 302 阅读 · 0 评论 -
Leetcode刷题java之103. 二叉树的锯齿形层次遍历
执行结果:通过显示详情执行用时 :1 ms, 在所有 Java 提交中击败了98.62% 的用户内存消耗 :38.5 MB, 在所有 Java 提交中击败了5.16%的用户题目:给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],...原创 2020-03-04 15:42:43 · 353 阅读 · 0 评论 -
Leetcode刷题java之297. 二叉树的序列化与反序列化
执行结果:通过显示详情执行用时 :108 ms, 在所有 Java 提交中击败了21.70% 的用户内存消耗 :51.6 MB, 在所有 Java 提交中击败了5.10%的用户题目:序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来...原创 2020-02-11 12:07:36 · 345 阅读 · 0 评论 -
Leetcode刷题java之437. 路径总和 III
执行结果:通过显示详情执行用时 :16 ms, 在所有 Java 提交中击败了70.04% 的用户内存消耗 :41.3 MB, 在所有 Java 提交中击败了12.40%的用户题目:给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二...原创 2020-02-10 18:16:02 · 335 阅读 · 0 评论 -
Leetcode刷题java之236. 二叉树的最近公共祖先
执行结果:通过显示详情执行用时 :8 ms, 在所有 Java 提交中击败了99.64% 的用户内存消耗 :38.5 MB, 在所有 Java 提交中击败了6.54%的用户题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x ...原创 2020-02-07 18:17:53 · 229 阅读 · 0 评论 -
Leetcode刷题java之543. 二叉树的直径
执行结果:通过显示详情执行用时 :0 ms, 在所有 Java 提交中击败了100.00% 的用户内存消耗 :38.4 MB, 在所有 Java 提交中击败了16.83%的用户题目:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。示例 :给定二叉树 1 / \...原创 2020-02-07 12:57:07 · 357 阅读 · 0 评论 -
Leetcode刷题java之114. 二叉树展开为链表
执行结果:通过显示详情执行用时 :0 ms, 在所有 Java 提交中击败了100.00% 的用户内存消耗 :35.8 MB, 在所有 Java 提交中击败了86.84%的用户题目:给定一个二叉树,原地将它展开为链表。例如,给定二叉树 1 / \ 2 5/ \ \3 4 6将其展开为:1\ 2 \ ...原创 2020-02-07 11:56:47 · 486 阅读 · 0 评论 -
Leetcode刷题java之105. 从前序与中序遍历序列构造二叉树
执行结果:通过显示详情执行用时 :14 ms, 在所有 Java 提交中击败了46.27% 的用户内存消耗 :42.5 MB, 在所有 Java 提交中击败了27.95%的用户题目:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [...原创 2020-02-07 11:01:01 · 264 阅读 · 0 评论 -
leetcode刷题java之102. 二叉树的层次遍历
执行结果:通过显示详情执行用时 :1 ms, 在所有 Java 提交中击败了98.67% 的用户内存消耗 :36.3 MB, 在所有 Java 提交中击败了56.75%的用户题目:给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 2...原创 2020-02-07 10:25:01 · 249 阅读 · 0 评论 -
Leetcdoe刷题java之101. 对称二叉树
执行结果:通过显示详情执行用时 :1 ms, 在所有 Java 提交中击败了47.18% 的用户内存消耗 :36.9 MB, 在所有 Java 提交中击败了59.30%的用户题目:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2/ \ / \3 4 4 3但...原创 2020-02-06 16:50:55 · 216 阅读 · 0 评论 -
Leetcode刷题java之98. 验证二叉搜索树
执行结果:通过显示详情执行用时 :1 ms, 在所有 Java 提交中击败了85.86% 的用户内存消耗 :38.7 MB, 在所有 Java 提交中击败了22.41%的用户题目:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有...原创 2020-02-06 16:34:03 · 349 阅读 · 0 评论 -
Leetcode刷题java之94. 二叉树的中序遍历
执行结果:通过显示详情执行用时 :1 ms, 在所有 Java 提交中击败了71.07% 的用户内存消耗 :34.4 MB, 在所有 Java 提交中击败了94.58%的用户题目:给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你...原创 2020-02-06 16:05:16 · 288 阅读 · 0 评论 -
Leetcode刷题java之96. 不同的二叉搜索树
执行结果:通过显示详情执行用时 :0 ms, 在所有 Java 提交中击败了100.00% 的用户内存消耗 :33 MB, 在所有 Java 提交中击败了34.44%的用户题目:给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?思路:属于动态规划类题目,根据它的规律可以推导出递推公式。G(n): 长度为n的序列的不同二叉搜索树个数。F(...原创 2020-01-28 11:52:54 · 236 阅读 · 0 评论 -
牛客网刷题java之请实现两个函数,分别用来序列化和反序列化二叉树
题目:请实现两个函数,分别用来序列化和反序列化二叉树思路:其实这道题没有说的特别明白,序列化就是按照前序遍历的顺序将其输出为一个字符串,节点为空则用#代替,反序列化就是讲一个字符串恢复成为一个树。代码中需要注意的方法:字符串的indexof方法,没有的话则返回-1字符串的substring方法,包含头不包含尾,如果只输入一个参数的话,则由当前位置到最后判断字符串内容是否...原创 2019-05-29 20:41:24 · 1009 阅读 · 0 评论 -
牛客网刷题java之输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:中序遍历,利用中间变量将彼此指针互相连接。代码:/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; ...原创 2019-05-29 14:45:04 · 1408 阅读 · 0 评论 -
牛客网刷题java之字形顺序打印二叉树
题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路:与分层打印二叉树类似,只不过在打印完每一层之后将集合中的内容反转arraylist的方法add增加一个元索如果队列已满,则抛出一个IIIegaISla...原创 2019-05-28 21:24:31 · 276 阅读 · 1 评论 -
牛客网刷题java之从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路:利用队列来进行实现,首先要知道队列的方法下表显示了jdk1.5中的阻塞队列的操作:arraylist的方法 add增加一个元索如果队列已满,则抛出一个IIIegaISlabEepeplian异常 remove移除并返回队...原创 2019-05-21 21:25:28 · 1514 阅读 · 0 评论 -
牛客网刷题java之给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
题目:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。思路:利用中序遍历,二叉搜索树的中序遍历就是从小到大排序之后的数组,所以,我把树进行中序遍历,用count标记第几个,那么就可以找到第k个小的数了代码:/*public class TreeNode { int val = 0;...原创 2019-05-21 20:40:56 · 1697 阅读 · 0 评论 -
牛客网刷题java之输入两棵二叉树A,B,判断B是不是A的子结构。
题目:输入两棵二叉树A,B,判断B是不是A的子结构。思路:先在A树中找B树的根节点,找到了根节点则继续往下查找,看是否全部匹配代码:/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int ...原创 2019-05-21 15:14:48 · 441 阅读 · 3 评论 -
牛客网刷题java之从上往下打印出二叉树的每个节点,同层节点从左至右打印。
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:利用队列来进行实现,首先要知道队列的方法,队列其实可以看做成一个arraylist或者linkedlist下表显示了jdk1.5中的阻塞队列的操作: arraylist的方法 add增加一个元索如果队列已满,则抛出一个IIIegaISl...原创 2019-05-21 14:38:11 · 1285 阅读 · 0 评论 -
牛客网刷题java之输入一棵二叉树,判断该二叉树是否是平衡二叉树。
题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。思路:就是利用求二叉树深度的思想,中间加一个判断条件,如果深度之差超过1,那么就是非平衡二叉树,遍历就可以结束了求深度思想的解释与代码参考上一篇https://blog.csdn.net/qq_41901915/article/details/90295784代码:public class Solution { ...原创 2019-05-20 10:35:26 · 1126 阅读 · 0 评论 -
牛客网刷题java之输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路:代码:/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(i...原创 2019-05-17 16:42:32 · 810 阅读 · 2 评论 -
牛客网刷题java之输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
题目:输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路:需要注意的地方:new ArrayList<Integer>(in)这个构造方法直接传入一个list作为创建的list的值做递归的一个技巧,尽量新创建一个函数,递归的过程尽量没有参数,没有返回值,这样递归...原创 2019-05-16 20:56:41 · 1431 阅读 · 1 评论 -
牛客网刷题java之请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路:代码:/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val...原创 2019-05-15 20:24:48 · 424 阅读 · 0 评论 -
牛客网刷题java之操作给定的二叉树,将其变换为源二叉树的镜像。
题目:操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5思路:...原创 2019-05-15 20:00:50 · 568 阅读 · 0 评论 -
牛客网刷题java之给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:如果一个节点的右子树不为空,那么该节点的下一个节点是右子树的最左节点;否则,向上找第一个左链接指向的树包含该节点的祖先节点。代码:/*public class TreeLinkNode { int val; ...原创 2019-05-15 09:37:07 · 524 阅读 · 0 评论 -
牛客网刷题java之输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树
今天在牛客网刷到了一个比较难的题目,看了大佬的代码,特此过来详细分析,以加深印象。题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解这道题的关键一个是思路,一个是找代码中的关键边界值。...原创 2019-05-13 11:12:44 · 2004 阅读 · 2 评论 -
Leetcode刷题java之938. 二叉搜索树的范围和
执行结果:通过显示详情执行用时 :1 ms, 在所有 Java 提交中击败了99.69% 的用户内存消耗 :54 MB, 在所有 Java 提交中击败了19.92%的用户题目:给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。二叉搜索树保证具有唯一的值。示例 1:输入:root = [10,5,15,3,7,null,18],...原创 2019-08-05 10:40:27 · 234 阅读 · 0 评论 -
Leetcode刷题java之617. 合并二叉树
执行结果:通过显示详情执行用时 :2 ms, 在所有 Java 提交中击败了89.63% 的用户内存消耗 :48.4 MB, 在所有 Java 提交中击败了64.75%的用户题目:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否...原创 2019-08-05 11:02:07 · 300 阅读 · 0 评论 -
Leetcode刷题java之700. 二叉搜索树中的搜索
执行结果:通过显示详情执行用时 :0 ms, 在所有 Java 提交中击败了100.00% 的用户内存消耗 :49.7 MB, 在所有 Java 提交中击败了31.55%的用户题目:定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: ...原创 2019-08-11 19:04:43 · 262 阅读 · 0 评论 -
Leetcode刷题java之226. 翻转二叉树
执行结果:通过显示详情执行用时 :1 ms, 在所有 Java 提交中击败了89.88% 的用户内存消耗 :35 MB, 在所有 Java 提交中击败了38.99%的用户题目:翻转一棵二叉树。示例:输入: 4 / \ 2 7/ \ / \1 3 6 9输出: 4 / \ 7 2...原创 2019-08-11 16:49:23 · 435 阅读 · 0 评论 -
Leetcode刷题java之872. 叶子相似的树
执行结果:通过显示详情执行用时 :2 ms, 在所有 Java 提交中击败了67.95% 的用户内存消耗 :35.4 MB, 在所有 Java 提交中击败了49.39%的用户题目:请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。如果两棵树的叶子序列相同,则返回true思路:利用递归与深度优先遍历的思想,如果当前节点的左和右都是空,...原创 2019-08-14 10:49:13 · 271 阅读 · 1 评论 -
Leetcode刷题java之897. 递增顺序查找树
执行结果:通过显示详情执行用时 :11 ms, 在所有 Java 提交中击败了86.44% 的用户内存消耗 :46.3 MB, 在所有 Java 提交中击败了75.50%的用户题目:给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。示例 :输入:[5,3,6,2,4,null,8,1,null,nul...原创 2019-08-14 09:25:56 · 352 阅读 · 1 评论 -
Leetcode刷题java之235. 二叉搜索树的最近公共祖先
执行结果:通过显示详情执行用时 :11 ms, 在所有 Java 提交中击败了71.66% 的用户内存消耗 :40.7 MB, 在所有 Java 提交中击败了21.10%的用户题目:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先...原创 2019-08-13 20:08:40 · 279 阅读 · 0 评论 -
Leetcode刷题java之637. 二叉树的层平均值
执行结果:通过显示详情执行用时 :5 ms, 在所有 Java 提交中击败了89.30% 的用户内存消耗 :44.8 MB, 在所有 Java 提交中击败了59.61%的用户题目:给定一个非空二叉树, 返回一个由每层节点平均值组成的数组.示例 1:输入: 3 / \ 9 20 / \ 15 7输出: [3, 14....原创 2019-08-13 19:02:35 · 675 阅读 · 1 评论 -
leetcode刷题java之559. N叉树的最大深度
执行结果:通过显示详情执行用时 :2 ms, 在所有 Java 提交中击败了97.25% 的用户内存消耗 :49.5 MB, 在所有 Java 提交中击败了81.62%的用户题目:给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。思路:利用递归算法,以及深度优先遍历的思想,值得注意的是要用一个max来临时记录最大值...原创 2019-08-12 10:44:14 · 237 阅读 · 0 评论 -
Leetcode刷题java之429. N叉树的层序遍历
执行结果:通过显示详情执行用时 :8 ms, 在所有 Java 提交中击败了45.71% 的用户内存消耗 :58.7 MB, 在所有 Java 提交中击败了41.12%的用户题目:给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。思路:利用队列和当前队列大小来实现每一层的层次遍历,要灵活运用continue,跳过本次循环代码:/*/...原创 2019-08-13 11:01:27 · 397 阅读 · 0 评论