![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
类型总结之——二叉树
二叉树典型题型
Mona______
好好学习天天向上 o(≧v≦)o
展开
-
二叉树总结点睛
一、二叉树1、常见名词DFS (depth first search ) 深度优先遍历BFS (breadth first search ) 广度优先遍历BST (binary search tree) 二叉搜索树AVL(Adelson-Velsky and Landis) 平衡二叉搜索树heap 堆2、常见分类满二叉树:是一种特殊的完全二叉树。只有度为0的节点和度为2的节点,且度为0的节点在同一层什么是二叉树的度:就是二叉树中 节点和 节点 的线,有原创 2021-06-20 23:47:53 · 582 阅读 · 2 评论 -
二叉树总结点睛
一、二叉树1、常见名词DFS (depth first search ) 深度优先遍历BFS (breadth first search ) 广度优先遍历AVL(Adelson-Velsky and Landis) 平衡二叉搜索树2、常见分类满二叉树:是一种特殊的完全二叉树。只有度为0的节点和度为1的节点,且度为0的节点在同一层完全二叉树:除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。二叉搜索树:前面两种原创 2021-04-27 23:51:33 · 554 阅读 · 0 评论 -
leetcode——第208题——前缀树/字典树
题目:Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。boolean startsWi原创 2021-07-08 21:47:21 · 199 阅读 · 0 评论 -
leetcode——第337题——打家劫舍V3—树形递归
题目:在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。/** * Definition for a binary tree node. * struct TreeNode { *原创 2021-05-20 23:53:29 · 113 阅读 · 0 评论 -
leetcode——第993题——二叉树的堂兄弟节点
题目:在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。/** * Definition for a binary tree node. * struct TreeNode { * int val原创 2021-05-19 15:33:37 · 128 阅读 · 0 评论 -
leetcode——第208题——前缀(字典)树
题目:Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。boolean startsWi原创 2021-05-16 13:09:34 · 126 阅读 · 0 评论 -
leedcode——第538题——把二叉搜索树转换为累加树
题目:给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树/** * Definition for a binary tree node. * struct TreeNode { * int val;原创 2021-05-05 22:59:37 · 42 阅读 · 0 评论 -
leetcode——第108题——将有序数组转换为二叉搜索树
题目:给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), l原创 2021-05-05 20:48:47 · 104 阅读 · 0 评论 -
leetcode——第669题——修剪二叉搜索树
题目:给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树不应该改变保留在树中的元素的相对结构(即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在唯一的答案。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。/** * Definition for a binary tree node. * struct TreeNode { *原创 2021-05-05 19:50:37 · 129 阅读 · 0 评论 -
leetcode——第450题——删除二叉搜索树的节点
题目:给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *原创 2021-05-04 23:58:10 · 128 阅读 · 0 评论 -
leetcode——第701题——二叉搜索树的插入操作
题目:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode原创 2021-05-04 21:45:51 · 158 阅读 · 0 评论 -
leetcode——第235题——二叉搜索树的最近公共祖先
题目:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]/** * Definition for a binary tree node. * struct TreeNode { * int原创 2021-05-04 18:16:45 · 58 阅读 · 0 评论 -
leetcode——第236题——二叉树的最近公共祖先
题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *原创 2021-05-04 17:31:29 · 58 阅读 · 0 评论 -
leetcode——第501题——二叉搜索树中的众数
题目:给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值结点右子树中所含结点的值大于等于当前结点的值左子树和右子树都是二叉搜索树/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *原创 2021-05-04 14:24:09 · 93 阅读 · 0 评论 -
leetcode——第530题——二叉搜索树的最小绝对差
题目:给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x)原创 2021-05-03 23:42:35 · 85 阅读 · 0 评论 -
leetcode——第98题——验证二叉搜索树
题目:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。用了四种写法,奥利给~/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * Tre原创 2021-05-03 15:46:41 · 89 阅读 · 0 评论 -
leetcode——第700题——二叉搜索树
题目:给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(n原创 2021-05-03 00:02:39 · 58 阅读 · 0 评论 -
leetcode——第617题——合并二叉树
题目:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *原创 2021-05-02 23:11:53 · 141 阅读 · 0 评论 -
leetcode——第654题——最大的二叉树
题目:给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下:二叉树的根是数组 nums 中的最大元素。左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。返回有给定数组 nums 构建的 最大二叉树/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *l原创 2021-05-02 22:39:25 · 304 阅读 · 0 评论 -
leetcode——第105题——中序+前序构造二叉树
题目:根据一棵树的前序遍历与中序遍历构造二叉树。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullp原创 2021-05-02 21:52:51 · 61 阅读 · 0 评论 -
leetcode——第106题——中序加后序构造二叉树
题目:根据一棵树的中序遍历与后序遍历构造二叉树。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullp原创 2021-05-01 23:15:54 · 83 阅读 · 0 评论 -
leetcode——第113题——路径总和V2
题目:给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr),原创 2021-04-30 20:28:48 · 195 阅读 · 1 评论 -
leetcode——第112题——路径总和
题目:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}原创 2021-04-30 19:57:35 · 119 阅读 · 1 评论 -
leetcode——第513题——找树左下角的值 / 向下找 同时 向右找
题目:给定一个二叉树,在树的最后一行找到最左边的值。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nul原创 2021-04-30 18:30:26 · 123 阅读 · 1 评论 -
leetcode——第404题——左叶子之和
题目:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}原创 2021-04-30 13:49:00 · 62 阅读 · 0 评论 -
leetcode——第257——二叉树的所有路径--第一个回溯的写法--好难啊看了半天
题目:给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int原创 2021-04-29 20:59:23 · 64 阅读 · 0 评论 -
leetcode——第110题——平衡二叉树
题目:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nu原创 2021-04-29 13:56:16 · 97 阅读 · 0 评论 -
leetcode——第222题——完全二叉树的节点个数
题目:给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode原创 2021-04-29 12:55:12 · 213 阅读 · 0 评论 -
leetcode——第111题——二叉树的最小深度
题目:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {}原创 2021-04-28 22:44:45 · 90 阅读 · 0 评论 -
leetcode——第559题——N叉树的最大深度
题目:给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } No原创 2021-04-28 21:54:26 · 103 阅读 · 0 评论 -
leetcode——第104题——二叉树的最大深度
题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {}原创 2021-04-28 21:34:45 · 106 阅读 · 0 评论 -
leetcode——第572题——另一个树的子树
题目:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}原创 2021-04-28 19:32:30 · 78 阅读 · 0 评论 -
leetcode——第100题——相同的树
题目:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullp原创 2021-04-28 18:43:49 · 171 阅读 · 0 评论 -
leetcode——第101题——对称二叉树
题目:给定一个二叉树,检查它是否是镜像对称的。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullpt原创 2021-04-28 18:31:33 · 54 阅读 · 0 评论 -
leetcode——第589题——N叉树的前序遍历(注意st.pop() )三次错了!~
题目:给定一个 N 叉树,返回其节点值的 前序遍历 。N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。进阶:递归法很简单,你可以使用迭代法完成此题吗?/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val;原创 2021-04-27 23:36:02 · 71 阅读 · 0 评论 -
leetcode——第429题——N叉树的层序遍历
题目:给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } Node(int _val转载 2021-04-27 22:59:43 · 104 阅读 · 0 评论 -
leetcode——第199题——层序遍历之右视图
题目:给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int原创 2021-04-27 22:33:11 · 67 阅读 · 0 评论 -
leetcode——第107题——二叉树层序遍历V2
题目:给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:3/ 9 20/ 15 7返回其自底向上的层序遍历为:[[15,7],[9,20],[3]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。/** * D原创 2021-04-27 19:10:00 · 64 阅读 · 0 评论 -
leetcode——第102题——二叉树的层序遍历
题目:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(in原创 2021-04-27 18:44:19 · 58 阅读 · 0 评论 -
leetcode——第94题——二叉树的中序遍历
题目:给定一个二叉树的根节点 root ,返回它的 中序 遍历。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), le原创 2021-04-26 20:54:50 · 141 阅读 · 0 评论