
二叉树
文章平均质量分 51
二叉树日常练习
YXXYX
精通CV编程
展开
-
450. 删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:1,首先找到需要删除的节点;2,如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度。这道题目是一道二叉搜索树的题目,这个题需要考虑多种情况,因为一旦删除一个节点后影响的可能就是该节点下面的所有节点,非常麻烦,看着就很头大,下面是可能的几种情况:没找到删除的节点,遍历到原创 2021-08-31 19:17:42 · 544 阅读 · 0 评论 -
二叉搜索树简介和部分题目
引言二叉搜索树是一个有序树,遵循以下规则:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树二叉搜索树如图:ps:其实这些学习都是建立在二叉树的基础上,强烈建议学好二叉树,因为二叉树是当下运用比较广泛的一种数据结构,而且在二叉树的学习中不仅可以加强栈和队列的知识,还可以学会深搜和广搜,同样为图的学习打下非常好的基础,因为树就可以看成一个图;对于二叉搜索树,如果你做过比较多的二叉树的题原创 2021-08-31 18:32:36 · 520 阅读 · 0 评论 -
二叉树的前中后序遍历(递归+迭代)
引言二叉树的遍历大体分为两种,深度优先和广度优先,深度优先分为前中后序三种遍历方法,广度优先就是层序遍历;我们都知道深度优先遍历是通过栈实现的,广度优先遍历是通过递归实现的;这里分别用递归和迭代实现一下二叉树的三种深度优先遍历;注:递归实现比较简单,就只列出核心部分前序遍历遍历顺序:中——左——右递归实现:void preTraversal(TreeNode* cur, vector<int>& vec) { if (cur == NULL) return;原创 2021-08-29 11:45:09 · 537 阅读 · 0 评论 -
113. 路径总和 (剑指 Offer 34. 二叉树中和为某一值的路径)(回溯算法)
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22输出:[[5,4,11,2],[5,8,4,5]]示例 2:输入:root = [1,2,3], targetSum = 5输出:[]示例 3:输入:root = [1,2], target原创 2021-08-18 16:50:48 · 204 阅读 · 0 评论 -
105从前序与中序遍历序列构造二叉树 && 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)
引言这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程;前序和中序知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导一下)1,先看前序的第一个元素first,这个元素值就是根节点的元素值2,从中序遍历中找到该元素first,该元素左边的所有元素就是二叉树的左子树上的节点,右边的所有元素就是二叉树右子树的节点,即将中序遍历结果分为了两部分3,单看中序遍历左边,左边所有元素谁在先序遍历前面谁就是左树的根节点,右树一样(其实原创 2021-08-08 12:31:36 · 161 阅读 · 0 评论 -
递增顺序搜索树
给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。示例 1:输入:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]示例 2:输入:root = [5,1,7]输出:[1,null,5,null,7]这道题没有什么难度,非常适合原创 2021-05-22 17:14:21 · 287 阅读 · 0 评论 -
平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true提示:树中的节点数在范围 [0, 5000] 内-104 <= Node.val <原创 2021-05-23 17:24:38 · 132 阅读 · 0 评论 -
打印折痕方向(二叉树应用)
请把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。此时折痕是凹下去的,即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折2次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕。给定一个输入参数N,代表纸条都从下边向上方连续对折N次,请从上到下打印所有折痕的方向。例:N=1时,打印:downN=2时,打印:down down up这道题可以先拿个纸条折一下试试(略),会发现其中的规律:第一次折 折痕记为1凹第二次折 折痕记为2凹,2凸原创 2021-07-09 18:30:32 · 192 阅读 · 0 评论 -
最大搜索二叉子树大小(树形dp)
给定一颗二叉树的头节点head,返回这棵二叉树中最大的二叉搜索子树(二叉搜索树:该二叉树中左子树所有节点比它小,右子树所有节点比它大 );思路:这是一道分析可能性求解在二叉树上做类似动态规划的问题(树形dp),这种题就是一种递归套路,我们要分析求解的可能性,并由此找到我们所需要的信息,进而通过递归求解;这道题有两种可能性:1,与头节点无关所需信息:1.1,左树最大二叉搜索树大小1.2,右树最大二叉搜索树大小2,与头节点有关所需信息:2.1,左树为二叉搜索树2.2,右树为二叉搜索树2原创 2021-07-12 11:51:16 · 308 阅读 · 0 评论 -
二叉树的最近公共祖先(递归)
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 和节点 1原创 2021-07-15 12:20:01 · 744 阅读 · 1 评论