二叉树
文章平均质量分 66
903419
这个作者很懒,什么都没留下…
展开
-
构建二叉树
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。leetcode链接1. 递归创建思路:记录当前前序遍历和中序遍历值所在的位置;对于根节点左子树来说,在中序遍历根节点的左侧,即在中序遍历数组中,其左子树继续在创建时,查看是否到了根节点值的位置;对于根节点右子树来说,在中序遍历根节点的右侧,即在中序遍历数组中,其右子树继续在创建时,只需要查看是否前序遍历数组是否越界。class Solution {public:原创 2021-03-25 18:06:54 · 144 阅读 · 0 评论 -
红黑树的插入、及模拟实现红黑树(附代码 + 图解 + 注释)
红黑树原创 2021-02-10 13:41:16 · 2370 阅读 · 1 评论 -
AVL树的四种旋转,模拟实现AVL树
AVL树从入门到精通原创 2021-02-03 22:59:48 · 344 阅读 · 1 评论 -
二叉树中和为某一值的路径
题目描述:输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。链接:https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/解题思路:某一值的路径,则二叉树最后节点必须为叶子节点采用dfs + 回溯代码:class Solution {public: vector<vector<原创 2021-01-17 16:16:58 · 100 阅读 · 1 评论 -
二叉搜索树的后序遍历序列
题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof/解题思路:二叉搜索树的后序遍历序列。则最后的为根节点后序遍历时,左子树的值都比根节点值小当某节点比根节点值大时,则该节点为右子树,即右子树的值均大于根节点的值基于第三原创 2021-01-17 16:02:24 · 109 阅读 · 0 评论 -
从上到下打印二叉树
1.Ⅰ从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/采用二叉树的层序遍历:可采用递归和迭代的方式遍历1.1递归先保存根节点的值,再保存左右节点的值,并进行递归,当当前节点为空时,则直接返回。代码:class Solution {public: vector<int> ret;//返回的vecto原创 2021-01-16 16:32:58 · 177 阅读 · 1 评论 -
对称的二叉树
题目描述:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。链接:https://leetcode-cn.com/problems/dui-cheng-de-er-cha-shu-lcof/1.递归思路:递归的思路很容易想两节点不同时为空时,则不是对称的两节点同时为空,则是对称的两节点值不相等时,则不是对称的递归传递的条件,必须是一棵树的左边另一颗树的右边。和一颗树的右边和另一颗树的左边。这样的树的比较最后,才是对称的。代码:class原创 2021-01-08 11:12:38 · 105 阅读 · 0 评论 -
二叉树的镜像
题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]代码:class Solution {public: TreeNode* mirrorTree(TreeNode* root) { if(root == nullptr) return nullptr; TreeNode* left = mirrorTree(root-原创 2021-01-07 14:55:38 · 86 阅读 · 0 评论 -
二叉树的前序、中序、后序、层序遍历
二叉树的前序、中序、后序、层序遍历。递归、非递归、morris版本遍历原创 2021-01-04 21:27:24 · 391 阅读 · 2 评论 -
二叉搜索树的插入、删除
1.插入题目描述:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。链接:https://leetcode-cn.com/problems/insert-into-a-binary-search-tree2. 删除给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索原创 2021-01-02 17:08:53 · 1394 阅读 · 3 评论 -
验证二叉树
题目描述:二叉树上有 n 个节点,按从 0 到 n - 1 编号,其中节点 i 的两个子节点分别是 leftChild[i] 和 rightChild[i]。只有 所有 节点能够形成且 只 形成 一颗 有效的二叉树时,返回 true;否则返回 false。如果节点 i 没有左子节点,那么 leftChild[i] 就等于 -1。右子节点也符合该规则。注意:节点没有值,本问题中仅仅使用节点编号。链接:https://leetcode-cn.com/problems/validate-binary-t原创 2020-12-31 15:26:09 · 147 阅读 · 1 评论 -
有序链表转换二叉搜索树
题目描述:给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tre原创 2020-12-13 13:53:39 · 147 阅读 · 0 评论 -
二叉树着色游戏
题目描述:有两位极客玩家参与了一场「二叉树着色」的游戏。游戏中,给出二叉树的根节点 root,树上总共有 n 个节点,且 n 为奇数,其中每个节点上的值从 1 到 n 各不相同。游戏从「一号」玩家开始(「一号」玩家为红色,「二号」玩家为蓝色),最开始时,「一号」玩家从 [1, n] 中取一个值 x(1 <= x <= n);「二号」玩家也从 [1, n] 中取一个值 y(1 <= y <= n)且 y != x。「一号」玩家给值为 x 的节点染上红色,而「二号」玩家给值为原创 2020-12-07 17:04:54 · 216 阅读 · 0 评论 -
修剪二叉搜索树
题目描述:给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树不应该改变保留在树中的元素的相对结构(即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在唯一的答案。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。链接:https://leetcode-cn.com/problems/trim-a-binary-search-tree输入:原创 2020-12-07 10:18:16 · 210 阅读 · 0 评论 -
二叉树的直径
题目描述:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。链接:https://leetcode-cn.com/problems/diameter-of-binary-tree/重要信息:该条路径可能不穿过根节点。即子树的路径可能比另一子树从根到该子树最远节点的路径要长。思路分析:求树的深度时,也会求子树的深度,则带入一个临时值,用此来比较子树的路径长大还是父树的。代码:class Solution {publi原创 2020-12-06 17:33:48 · 134 阅读 · 0 评论 -
翻转等价二叉树
题目描述:我们可以为二叉树 T 定义一个翻转操作,如下所示:选择任意节点,然后交换它的左子树和右子树。只要经过一定次数的翻转操作后,能使 X 等于 Y,我们就称二叉树 X 翻转等价于二叉树 Y。编写一个判断两个二叉树是否是翻转等价的函数。这些树由根节点 root1 和 root2 给出。链接:https://leetcode-cn.com/problems/flip-equivalent-binary-trees例如:思路分析:判断一个二叉树是否是否为翻转等价,则在同层节点,root1左子树值原创 2020-12-06 16:11:19 · 229 阅读 · 0 评论 -
验证二叉搜索树
题目描述:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。链接:https://leetcode-cn.com/problems/validate-binary-search-tree...原创 2020-12-05 22:55:19 · 105 阅读 · 0 评论 -
最大二叉树
题目描述:给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。链接:https://leetcode-cn.com/problems/maximum-binary-tree思路:每次先找到数组中最大的值,左子树是当前最大值的左边,右子树是当前最大值的右边。找到数组最大值,构造节点原创 2020-12-05 17:39:47 · 445 阅读 · 2 评论 -
树的子结构
题目描述:输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A:给定的树 B:返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。链接:https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof思路:找寻子结构,分为两种情况,该子结构在左边或者在右边。则进行递归判断找到了两值相等节点,开始检测是否是子结构不是,再继原创 2020-12-05 17:12:31 · 93 阅读 · 0 评论 -
输出二叉树
题目描述:在一个 m*n 的二维字符串数组中输出二叉树,并遵守以下规则:行数 m 应当等于给定二叉树的高度。列数 n 应当总是奇数。根节点的值(以字符串格式给出)应当放在可放置的第一行正中间。根节点所在的行与列会将剩余空间划分为两部分(左下部分和右下部分)。你应该将左子树输出在左下部分,右子树输出在右下部分。左下和右下部分应当有相同的大小。即使一个子树为空而另一个非空,你不需要为空的子树输出任何东西,但仍需要为另一个子树留出足够的空间。然而,如果两个子树都为空则不需要为它们留出任何空间。每个未使原创 2020-12-05 16:24:48 · 1876 阅读 · 0 评论 -
二叉树剪枝
二叉树剪枝原创 2020-12-05 15:03:16 · 218 阅读 · 0 评论 -
二叉树的最近公共祖先节点
4种类似的题目,一次搞定。原创 2020-12-04 17:49:16 · 3551 阅读 · 6 评论