![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二叉树
文章平均质量分 82
本专栏对应于代码随想录中二叉树章节的题目
leaf-view
这个作者很懒,什么都没留下…
展开
-
leetcode236.C++解决二叉树的最近公共祖先
这道题目我给出两种写法:运用后序遍历的回溯过程,如果找到了我想要的节点就像上层返回该节点,没有找到就返回空。首先可以观察到如果一个节点在root的左子树,另一个在右子树,root就是公共祖先;如果两个都在root的左(右)子树,则公共祖先是其中一颗子树返回的节点。 解题步骤见下图: 针对于上图中第三种特殊情况,我们不用关心p节点是否能找到,因为递归到了q就会向上返回,并且q就是我们要的最近公共祖先。 下面给出了C++实例代码: 复杂度分析: 时间复杂度 O(N) : 其中 N 为二叉原创 2024-05-10 11:09:53 · 380 阅读 · 1 评论 -
leetcode108.将有序数组转换为二叉搜索树(递归+迭代)
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵平衡二叉搜索树。原创 2024-05-16 12:38:44 · 290 阅读 · 0 评论 -
leetcode669.修剪二叉搜索树(递归+迭代)
思路:误区:如下代码是错误解法 之前做过删除二叉搜索树中的节点这题之后,我们很容易能写出一个节点被删除,要将 连接到要删除节点的父节点,这样我们就遗漏了后面要删除的节点,如下图。 所以我们要在子树中继续去找,将整棵树的问题转化为子树的子问题,它们的操作逻辑是一样的。具体递归展开如下图:从递归最深的节点开始向上回溯,2的左和2的右都接收到返回值之后,就意味着1的删除;然后2将它自己返回作为3的左的接收值,3的右接受空;再然后3将自己返回作为8的左的接收值,这意味着0的删除;右子树的逻辑也如此… 正确解法:原创 2024-05-15 21:11:57 · 538 阅读 · 1 评论 -
leetcode450.删除二叉搜索树中的节点(递归+迭代法)C++实现
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:1. 首先找到需要删除的节点;2. 如果找到了,删除它。原创 2024-05-13 22:49:38 · 891 阅读 · 0 评论