![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二叉树
加油开心
你好呀
展开
-
leetcode:二叉树展开为链表
即,要在原来TreeNode上改。然后把2原来右边拼接到新的右边上。我这里是另外的,所以运行不通过。这题关键是函数返回是void。原来节点不变基础上改。原创 2024-08-21 14:09:23 · 116 阅读 · 0 评论 -
leetcode:填充每个节点的下一个右侧节点指针
那么不同父节点的之间连接不上。如果只是单纯的遍历连接节点。原创 2024-08-21 13:24:33 · 190 阅读 · 0 评论 -
leetcode:反转二叉树的奇数层
深度优先的话,有点类似leetcode的对称二叉树。广度优先很好想,就是一个变量计数到了哪一层。以下是判断一棵树是不是对称二叉树的代码。这道题用深度优先和广度优先都可以。原创 2024-08-06 14:03:08 · 189 阅读 · 0 评论 -
leetcode:翻转二叉树
【代码】leetcode:翻转二叉树。原创 2024-08-06 12:31:32 · 162 阅读 · 0 评论 -
leetcode:完全二叉树的节点个数
下面代码也可以用于求一个二叉树所有节点。这题我用的是二叉树的层序遍历。这题可以用dfs一行就结束了。再用一个遍历计数即可。原创 2024-08-06 10:58:52 · 209 阅读 · 0 评论 -
leetcode:路径总和
就拿上图来说targetSum = 20,那么5,4,11就不行,因为11不是叶子节点。你如果放在开头,就算等于targetSum,那也不一定是叶子节点。还有就是if判断是否等于targetSum要注意位置,放在哪?人家说的是根节点到叶子节点,什么是叶子节点?就是其左右都没有节点了,不能是中间的。因为题目说的很明白,是叶子节点。有了第一次,就会有第二次。这道题有很多细节要注意。原创 2024-07-23 15:22:49 · 104 阅读 · 0 评论 -
leetcode:平衡二叉树
就表面想一下,比如这题需要两个变量记录左右子树长度。建议全局变量记录,或者像我下面一样,加几个if。如果在递归过程中碰到正确答案了,你要返回。不要想复杂,不要往深处想。对于每一个节点都是一样的。原创 2024-07-23 13:29:13 · 112 阅读 · 0 评论 -
leetcode:把二叉搜索树转换为累加树
当初首先想到从右开始遍历。原创 2024-07-22 13:37:41 · 100 阅读 · 0 评论 -
leetcode:二叉搜索树中第k小的元素
和上面区别是,上边是全部遍历完了,再取第k个。通过迭代法,按照中序遍历将节点存到列表中。遍历过程中,用一个变量计数,是否等于k。然后取列表中第k-1个元素即可。这个是边遍历边判断。原创 2024-07-22 13:12:35 · 135 阅读 · 1 评论 -
leetcode:对称二叉树
给dfs函数传的是根节点左右两个子树,直接判断两个子树相不相同即可。这个题和leetcode100题一样的。代码直接复制过来即可。原创 2024-07-22 11:44:10 · 125 阅读 · 0 评论 -
leetcode:相同的树
所以,不能通过前序遍历将其结果存到数组里,再逐一比较。一个二叉树通过前序遍历得到的数组。就是新建两个队列,逐一比较即可。原创 2024-07-18 15:10:45 · 111 阅读 · 0 评论 -
leetcode:整数转罗马数字
这里我用到了平衡二叉树。原创 2024-07-08 15:22:05 · 208 阅读 · 0 评论 -
TreeMap用法
ceilingKey(K key):它与上一个 key 具有相同的工作,但唯一的不同是它不包含mapped-keys。ceilingEntry(K Key):用于返回与大于或等于给定键的最小键关联的键值映射,如果没有这样的键,则返回null。HigherEntry() - 返回与所有大于指定键的键中最小的键相关的条目。lowerEntry() - 返回与所有小于指定键的键中最大的键关联的条目。HigherKey() - 返回大于指定键的那些键中的最小的键。原创 2024-07-08 13:38:41 · 205 阅读 · 0 评论 -
leetcode:二叉树的最小深度
左边最小值是0,右边管你多少,min(左最小,右最小)一定是0。最小深度=左节点最小深度和右节点最小深度的最小值+1。最后结果是0+1=1,最小长度是1。这个题我按照分解问题来想。为什么加上两个if?原创 2024-06-03 22:45:49 · 182 阅读 · 2 评论 -
leetcode:二叉树的垂直遍历
前序遍历不能维护从上到下的顺序,所以还需要维护每个节点的深度,利用深度保证上下顺序。相比层序遍历,要更麻烦一些。这样的话你每次取最小值先是9,然后是3,15,然后20,然后7,顺序是对的。递归函数记录每一个节点的垂直值。并不是你往里存值按照先来后到。然后每次取哈希表最小值输出。但问题是哈希表偏偏不这么存。所以这道题建议层序遍历。比如以上面第一个树为例。顺序是对的,不能打乱。但是你忽视了一个问题。你以为的哈希表存的是。原创 2024-06-03 21:53:49 · 223 阅读 · 0 评论 -
leetcode:二叉树的堂兄弟节点
记录每一个节点的深度和父节点,需要设置函数参数。所以你在判断条件的时候要加上不为空。如果x或者y就是头节点,咋办?找到第一个就记录在全局变量里。所以最后结果一定是false。第一次凭本事做出一道递归题。因为二者只要有一个是头节点。刚进入左节点深度肯定加1。那么头节点肯定没有父节点。离开右节点深度肯定减1。继续记录在全局变量里。原创 2024-05-29 23:06:21 · 154 阅读 · 0 评论 -
leetcode:二叉树的锯齿形层序遍历
初始值是0表示第一层,这样0%2余数是0,表示不反转。每次都要加1,如果余数是1,表示反转。整体上没改动,就加了10行左右。只不过你要区分到了哪一层。原创 2024-05-28 21:30:33 · 116 阅读 · 0 评论 -
leetcode:二叉树的层序遍历II
这里比较巧妙,第一次添加的时候使用addFirst方法。这个和二叉树层序遍历模板几乎一样。就是把模板的结果逆序即可。原创 2024-05-27 22:13:46 · 217 阅读 · 0 评论 -
leetcode:二叉树的层平均值
一个是通过两个变量来控制不同层。一个是通过两个队列来区分不同层。我这里使用的是两个队列来区分。其实看你能不能区分层。原创 2024-05-27 22:11:31 · 148 阅读 · 0 评论 -
leetcode:二叉树的直径
最大直径就是一个节点的左子树最长长度+右子树最长长度+1。和子树有关,就是后序位置。原创 2024-04-11 22:09:18 · 173 阅读 · 0 评论 -
leetcode:二叉树的最大深度
第二种能否通过子问题答案推导出来。一种能否遍历一遍得到结果。这个题明显两种都可以。原创 2024-04-11 21:49:37 · 216 阅读 · 1 评论 -
leetcode:二叉树的层序遍历
就是一层一层的,从上到下。每统计完一层,加进去。原创 2024-04-11 20:58:21 · 111 阅读 · 0 评论 -
leetcode:二叉树的后序遍历
【代码】leetcode:二叉树的后序遍历。原创 2024-04-11 15:36:09 · 97 阅读 · 1 评论 -
leetcode:二叉树的前序遍历
【代码】leetcode:二叉树的前序遍历。原创 2024-04-11 15:34:02 · 74 阅读 · 1 评论 -
leetcode:二叉树的中序遍历
很简单,直接写就行了。原创 2024-04-11 15:31:19 · 109 阅读 · 1 评论 -
完全二叉树转换为二叉堆
首先第一步,你得先把完全二叉树变为一个堆。就是一个节点的左右节点都比他小或大。变为堆之后,在排序为二叉堆。原创 2023-12-06 14:26:45 · 435 阅读 · 0 评论 -
用数组构造二叉树
先定义一个数组,然后将数组转换为链表(一个for循环取数组值,设置一下next指针即可),最后根据这个链表构造二叉树(这里是通过前序遍历方法构造,你也可以根据后序遍历来构造)原创 2023-12-04 11:54:05 · 497 阅读 · 0 评论