![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树
earlene_wyl
这个作者很懒,什么都没留下…
展开
-
剑指offer. 36 二叉搜索树转为双向链表
剑指offer. 36二叉搜索树转为双向链表题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路:树的题,大部分递归就完事了,然后根节点干好根节点的事情。因为题目要求排好序,所以用中序遍历(but,后序遍历,实现也行啊,递归关什么序遍历屁事?只要自己做好自己该做的事情不就ok了,不懂)...原创 2019-08-07 15:32:14 · 103 阅读 · 0 评论 -
剑指offer. 8 二叉树的中序后继和前驱节点
剑指offer. 8二叉树的中序后继和前驱节点题目描述:后继节点:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。(根节点的指向父节点的next指针为nullptr)解题思路:前驱节点和后继节点分别是中序遍历(左中右)的前一个 和后一个节点。其实记忆方法很简单,把当前节点当作中节点考...原创 2019-08-07 13:53:48 · 808 阅读 · 0 评论 -
leetcode 124. 二叉树中的最大路径和 hard
leetcode124. 二叉树中的最大路径和 hard 题目描述:给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。解题思路:我们遍历每个节点,计算以当前节点为终点的所有路径中的最长路径,当然可能只有当前节点一个(当以左右儿子终点的路最长路径都小于0的情况下)...原创 2019-08-07 02:13:18 · 144 阅读 · 0 评论 -
剑指offer. 34 二叉树中和为某一值的路径
剑指offer. 34二叉树中和为某一值的路径题目描述:输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。解题思路:回溯法? 或者说就是前序遍历代码:class Solution {public://回溯法? 或者说就是前序遍历 vector<ve...原创 2019-08-07 00:32:47 · 94 阅读 · 0 评论 -
leetcode 100. 相同的树 easy
leetcode100. 相同的树 easy 题目描述:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。解题思路:简单题,递归即可代码:class Solution {public: bool isSameTree(TreeNode* p, TreeNode* q) ...原创 2019-08-07 00:12:12 · 83 阅读 · 0 评论 -
leetcode 98. 验证二叉搜索树 medium
leetcode98. 验证二叉搜索树medium 题目描述:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。解题思路:解法1:递归解法2:迭代 因为二叉搜索树的中序遍历...原创 2019-08-07 00:08:26 · 110 阅读 · 0 评论 -
剑指offer. 33 二叉搜索树的后序遍历序列
剑指offer. 33二叉搜索树的后序遍历序列题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解题思路:因为是后序遍历,所以数组最后一个元素为根节点,而又因为是二叉搜索树,所以可以根据根元素把数组分为两半,前半部分为左子树,都比根小,后半部分为右子树 都比根大。因此 用根...原创 2019-08-07 00:04:50 · 88 阅读 · 0 评论 -
剑指offer. 27 二叉树的镜像
剑指offer. 27二叉树的镜像题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / ...原创 2019-08-06 23:05:40 · 101 阅读 · 0 评论 -
leetcode 543. 二叉树的直径 easy
leetcode543. 二叉树的直径 easy 题目描述:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回3, 它的长度是路径 ...原创 2019-08-09 17:14:30 · 230 阅读 · 0 评论 -
leetcode 173. 二叉搜索树迭代器 medium
leetcode173. 二叉搜索树迭代器 medium 题目描述:实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用next()将返回二叉搜索树中的下一个最小的数。提示:next()和hasNext()操作的时间复杂度是O(1),并使用O(h) 内存,其中h是树的高度。你可以假设next()调用总是有效的,也...原创 2019-08-09 17:34:50 · 173 阅读 · 0 评论 -
刷题(5)-二叉查找树(3)
#ifndef CPP_BINARY_SEARCH_TREE_H#define CPP_BINARY_SEARCH_TREE_H#include <iostream>#include <stack>template <typename T>class BinarySearchTree{private: struct Node{ T val; Node *left, *right; explic...原创 2019-03-03 02:32:56 · 150 阅读 · 0 评论 -
leetcode 208. 实现 Trie (前缀树) medium
leetcode208. 实现 Trie (前缀树) medium 题目描述:实现一个 Trie (前缀树),包含insert,search, 和startsWith这三个操作。说明:你可以假设所有的输入都是由小写字母a-z构成的。 保证所有输入均为非空字符串。解题思路:代码:struct Node{ bool i...原创 2019-08-13 10:21:03 · 270 阅读 · 0 评论 -
刷题(5)-Trie树(4)
简介Trie树的实现//Trie树的实现struct Node{ bool is_end; Node *child[26]; Node():is_end(false){ for(int i=0;i<26;i++) child[i]=nullptr; }};class Trie {...原创 2019-08-13 10:19:33 · 119 阅读 · 0 评论 -
leetcode 863. 二叉树中所有距离为 K 的结点 medium (重要)
leetcode863. 二叉树中所有距离为 K 的结点 medium 题目描述:给定一个二叉树(具有根结点root),一个目标结点target,和一个整数值 K 。返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。解题思路:解法1:把树转为图,简单来说,就是建一个hash表,保存每个节点的父节点,...原创 2019-08-10 19:30:13 · 234 阅读 · 0 评论 -
leetcode 96 && 95 . 不同的二叉搜索树 medium(重要)
leetcode96. 不同的二叉搜索树 medium(重要) 题目描述:给定一个整数n,求以1 ...n为节点组成的二叉搜索树有多少种?解题思路:假设以1 ...n为节点组成的二叉搜索树有f(n)种,而分别以1,2。。。n为根,假如以x为根,那么它的左子树必须是1.。。x-1,而它的右子树必须是x+1。。。n,而左子树1.。。x-1有f(x-...原创 2019-08-10 15:55:15 · 75 阅读 · 0 评论 -
leetcode 235 &236 树的最近公共祖先 medium
leetcode235. 二叉搜索树的最近公共祖先 easy 题目描述:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。说明:所有节点的值都是唯一的。 p、q 为不同节点且均存在于给定的二叉搜索树中。解题思路:如果是二叉搜索树,可以从根节点开始和两个指定节点进行比较,假如当前节点的值比两个节点的值都大,那么最近公共祖先一定在左子树上,而假如当前节点...原创 2019-08-21 22:38:17 · 154 阅读 · 0 评论 -
leetcode 114. 二叉树展开为链表 medium
leetcode 114. 二叉树展开为链表 medium 题目描述:给定一个二叉树,原地将它展开为链表。例如,给定二叉树 1 / \ 2 5/ \ \3 4 6将其展开为:1\ 2 \ 3 \ 4 \ 5 \ ...原创 2019-08-09 20:26:02 · 459 阅读 · 0 评论 -
leetcode 226. 翻转二叉树 easy
leetcode 226. 翻转二叉树easy 题目描述:翻转一棵二叉树。示例:输入: 4 / \ 2 7/ \ / \1 3 6 9输出: 4 / \ 7 2/ \ / \9 6 3 1解题思路:先序递归代码:class Solut...原创 2019-08-09 18:22:22 · 193 阅读 · 0 评论 -
leetcode 572. 另一个树的子树 easy && 剑指offer. 26 树的子结构
leetcode 572. 另一个树的子树easy 题目描述:给定两个非空二叉树 s 和 t,检验s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 2:给定的树 s: 3 / \ 4 5 / \1 2 / 0给...原创 2019-08-06 22:49:13 · 120 阅读 · 0 评论 -
leetcode 101. 对称二叉树 easy
leetcode101. 对称二叉树 easy 题目描述:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2/ \ / \3 4 4 3如果你可以运用递归和迭代两种方法解决这个问题,会很加分。解题思路:解法1:递归,比较简单解法2:迭代 (可以用...原创 2019-08-06 21:49:29 · 99 阅读 · 0 评论 -
leetcode 230. 二叉搜索树中第K小的元素 medium
leetcode230. 二叉搜索树中第K小的元素 medium 题目描述:给定一个二叉搜索树,编写一个函数kthSmallest来查找其中第k个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。进阶:如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化kthSmallest...原创 2019-07-26 22:41:06 · 123 阅读 · 0 评论 -
刷题(5)-二叉树的四种遍历(2)
前中后递归版://二叉树的遍历:前序:中左右 中序:左中右 后序:左右中void recur(btnode *p){ //递归版 if(p != nullptr){ cout<<p->date<<endl; // 前序 count放这 recur(p->left); ...原创 2019-07-26 20:00:52 · 167 阅读 · 0 评论 -
leetcode 107. 二叉树的层次遍历 II easy
leetcode107. 二叉树的层次遍历 II easy题目描述:给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7],...原创 2019-07-26 19:38:03 · 119 阅读 · 0 评论 -
leetcode 103. 二叉树的锯齿形层次遍历 medium
leetcode103. 二叉树的锯齿形层次遍历 medium题目描述:给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3...原创 2019-07-26 19:24:09 · 122 阅读 · 0 评论 -
leetcode102. 二叉树的层次遍历 medium
leetcode102. 二叉树的层次遍历medium题目描述:给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]...原创 2019-07-26 19:05:17 · 90 阅读 · 0 评论 -
leetcode 429. N叉树的层序遍历 easy
leetcode429. N叉树的层序遍历easy题目描述:给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。例如,给定一个3叉树:返回其层序遍历:[ [1], [3,2,4], [5,6]]解题思路:一般的层序,用1个循环,每次把当前pop的节点的各个儿子加进来。需要按层输出的层序,用...原创 2019-07-26 18:49:55 · 118 阅读 · 0 评论 -
leetcode 589. N叉树的前序遍历 easy
leetcode589. N叉树的前序遍历easy题目描述:给定一个 N 叉树,返回其节点值的前序遍历。例如,给定一个3叉树:返回其前序遍历:[1,3,5,6,2,4]。解题思路:如二叉树的前序一样,左右儿子的压栈顺序是相反的,并且要注意size()返回的是一个无符号数!代码:/*// Definition for a No...原创 2019-07-26 16:57:50 · 143 阅读 · 0 评论 -
leetcode 590. N叉树的后序遍历 easy
leetcode590. N叉树的后序遍历 easy题目描述:给定一个 N 叉树,返回其节点值的后序遍历。例如,给定一个3叉树:返回其后序遍历:[5,6,3,2,4,1].解题思路:双栈or针对这一题,单栈,最后reversevector代码:/*// Definition for a Node.class Node {...原创 2019-07-26 16:44:40 · 97 阅读 · 0 评论 -
leetcode 450. 删除二叉搜索树中的节点 medium
leetcode450. 删除二叉搜索树中的节点medium 题目描述:给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的key对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为O(h...原创 2019-07-27 00:01:37 · 148 阅读 · 0 评论 -
leetcode 958. 二叉树的完全性检验 medium
leetcode958. 二叉树的完全性检验medium 题目描述:给定一个二叉树,确定它是否是一个完全二叉树。百度百科中对完全二叉树的定义如下:若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~2h个节点。)示例 1:...原创 2019-08-21 22:38:27 · 277 阅读 · 0 评论 -
leetcode 199. 二叉树的右视图 medium
leetcode199. 二叉树的右视图 medium 题目描述:给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入:[1,2,3,null,5,null,4]输出:[1, 3, 4]解释: 1 <---/ \2 3 <---...原创 2019-08-06 21:17:00 · 103 阅读 · 0 评论 -
刷题(5)-树(1)
树的各种概念:树的完整概念二叉树节点表示:struct btnode{ int data; btnode *left; btnode *right;}几个性质:1. 根节点处于第1层,在二叉树的第i层上至多有2^(i-1)个节点(i>=1)2.深度为k的二叉树至多有2^k-1个节点 (2^0 + 2^1 +....+2^(k-...原创 2019-09-06 22:50:19 · 171 阅读 · 0 评论 -
leetcode 297. 二叉树的序列化与反序列化 hard
leetcode297. 二叉树的序列化与反序列化 hard 题目描述:序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序...原创 2019-08-06 20:35:55 · 205 阅读 · 0 评论 -
leetcode106. 从中序与后序遍历序列构造二叉树 medium
leetcode106. 从中序与后序遍历序列构造二叉树 medium 题目描述:根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder =[9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]解题思路:跟105题一样,同样没有重复元素,而中序:...原创 2019-08-06 17:55:04 · 117 阅读 · 0 评论 -
leetcode 105. 从前序与中序遍历序列构造二叉树 medium
leetcode105. 从前序与中序遍历序列构造二叉树 medium 题目描述:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。解题思路:由于先序的顺序的第一个肯定是根,所以原二叉树的根节点可以知道,题目中给了一个很关键的条件就是树中没有相同元素,有了这个条件我们就可以在中序遍历中也定位出根节点的位置,并以根节点...原创 2019-08-06 17:43:50 · 109 阅读 · 0 评论 -
leetcode 113. 路径总和 II medium
leetcode113. 路径总和 II medium 题目描述:给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明:叶子节点是指没有子节点的节点。解题思路:dfs代码:class Solution {public: vector<vector<int>> pathS...原创 2019-08-21 22:39:03 · 108 阅读 · 0 评论 -
leetcode 路径总和系列(1,2,3,4)
leetcode112. 路径总和 easy 题目描述:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明:叶子节点是指没有子节点的节点。解题思路:方法1:简单的dfs即可方法2:迭代。用先序遍历,但是遍历到的每个节点它的左右子结点都需要加上其父结点值,再压入栈中。这样当遍历到叶结点时,...原创 2019-08-11 00:19:54 · 565 阅读 · 0 评论 -
剑指offer. 55-2 平衡二叉树
剑指offer. 55-2平衡二叉树题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。解题思路:利用后序遍历二叉树的每个节点,同时在遍历每个节点的时候记录它的深度代码:class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { int depth; ...原创 2019-08-21 22:38:34 · 105 阅读 · 0 评论 -
leetcode 426. 将二叉搜索树转化为排序的双向链表 medium
leetcode426. 将二叉搜索树转化为排序的双向链表 medium 题目描述:将一个二叉搜索树就地转化为一个已排序的双向循环链表。可以将左右孩子指针作为双向循环链表的前驱和后继指针。解题思路:方法一:递归解决问题,主要就是细心方法二(这个方法好):因为要求是排序的双向链表,而这颗树是二叉搜索树,所以可以直接用循环的中序遍历来做,搞定每一个节点。...原创 2019-09-12 13:44:18 · 840 阅读 · 0 评论