树
anieoo
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 55 - I. 二叉树的深度
代码】剑指Offer55-I.二叉树的深度。原创 2022-07-16 14:48:33 · 119 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III
原题链接:剑指 Offer 32 - III. 从上到下打印二叉树 III solution: 层序遍历,利用一个栈和flag标志实现顺序的转换原创 2022-07-10 23:51:56 · 72 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构
原题链接:剑指 Offer 26. 树的子结构solution: 代码主要分为两步: ① 通过dfs判断B是否是以A为根节点的子树 ② 通过isSubstructure函数对每个A中的节点进行遍历原创 2022-07-02 11:01:32 · 71 阅读 · 0 评论 -
109. 有序链表转换二叉搜索树
原题链接:109. 有序链表转换二叉搜索树 solution: 递归:中间节点的左边是左子树,右边是右子树原创 2022-06-15 14:22:22 · 168 阅读 · 0 评论 -
103. 二叉树的锯齿形层序遍历
原题链接:103. 二叉树的锯齿形层序遍历 solution: 层序遍历,加一个reverse原创 2022-06-15 13:08:21 · 165 阅读 · 0 评论 -
669. 修剪二叉搜索树
原题链接:669. 修剪二叉搜索树 solution: 递归处理原创 2022-06-02 09:18:19 · 67 阅读 · 0 评论 -
450. 删除二叉搜索树中的节点
原题链接:450. 删除二叉搜索树中的节点 solution: 本题采用递归地思想实现。①首先利用二叉搜索树的性质寻找需要删除的节点所在的位置②如果要删除的节点左子树为空直接返回右子树③如果要删除的节点右子树为空直接返回左子树④否则利用二叉搜索树的性质,将需要删除节点的左子树连接到右节点的左子树上原创 2022-06-02 09:04:13 · 78 阅读 · 0 评论 -
654. 最大二叉树
原题链接:654. 最大二叉树solution:创建一个根节点,其值为nums中的最大值。 递归地在最大值左边的子数组前缀上构建左子树。 递归地在最大值右边的子数组后缀上构建右子树。class Solution {public: unordered_map<int,int> pos; TreeNode* constructMaximumBinaryTree(vector<int>& nums) { i...原创 2022-05-31 14:47:44 · 72 阅读 · 0 评论 -
106. 从中序与后序遍历序列构造二叉树
原题链接:106. 从中序与后序遍历序列构造二叉树solution: 本体的思路整体是和Leetcode 105一样,不过是后序遍历和中序遍历的组合105. 从前序与中序遍历序列构造二叉树_anieoo的博客-CSDN博客class Solution {public: unordered_map<int,int> pos; TreeNode* buildTree(vector<int>& inorder, vect...原创 2022-05-31 13:59:10 · 83 阅读 · 0 评论 -
113. 路径总和 II
原题链接:113. 路径总和 IIsolution: 树的深度优先搜索,优先递归左子树,每次当前节点不为空时,用target - root->val,最后进行判断遍历到叶子节点并且target == 0 的时候,保存当前路径class Solution {public: vector<vector<int>> res; void dfs(vector<int> path,TreeNode *root,int targ...原创 2022-05-31 09:31:54 · 68 阅读 · 0 评论 -
513. 找树左下角的值
原题链接:513. 找树左下角的值solution: ① 通过层序遍历不需要判断是否遍历到最后一层,是需要用一个变量保存每一层的第一个节点的值,当层序遍历结束的时候,变量保存的一定是最后一层的节点值。class Solution {public: int findBottomLeftValue(TreeNode* root) { queue<TreeNode*> que; if(root == nullptr) retu...原创 2022-05-31 09:16:36 · 189 阅读 · 0 评论 -
222. 完全二叉树的节点个数
原题链接:222. 完全二叉树的节点个数solution:直接递归,时间复杂度O(n)class Solution {public: int countNodes(TreeNode* root) { if(root == nullptr) return 0; int left = countNodes(root->left); int right = countNodes(root->right); .原创 2022-05-30 11:11:17 · 78 阅读 · 0 评论 -
515. 在每个树行中找最大值
原题链接:515. 在每个树行中找最大值solution: 层序遍历,定义一个变量计算每层的最大值原创 2022-05-28 10:18:43 · 59 阅读 · 0 评论 -
637. 二叉树的层平均值
原题链接:637. 二叉树的层平均值solution: 层序遍历class Solution {public: vector<double> averageOfLevels(TreeNode* root) { vector<double> res; if(root == nullptr) return res; queue<TreeNode*> que; que.p...原创 2022-05-28 09:31:58 · 68 阅读 · 0 评论 -
199. 二叉树的右视图
原题链接:199. 二叉树的右视图solution: 层序遍历,定义一个flag标志,每次只把每层最右边的数字保存到返回值数组中/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(...原创 2022-05-28 09:25:22 · 77 阅读 · 0 评论 -
107. 二叉树的层序遍历 II
原题链接:107. 二叉树的层序遍历 IIsolution: 先通过层序遍历存储每一层的节点,在通过存储的节点保存节点值class Solution {public: vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<vector<int>> travel; //返回值 if(root == nullptr) r...原创 2022-05-27 16:25:51 · 102 阅读 · 0 评论 -
965. 单值二叉树
原题链接:965. 单值二叉树Solution:class Solution {public: bool isUnivalTree(TreeNode* root) { if(root == nullptr) return true; if(root->left != nullptr && root->left->val != root->val) return false; if(root-&g.原创 2022-05-24 09:22:19 · 96 阅读 · 0 评论 -
124. 二叉树中的最大路径和
原题链接:124. 二叉树中的最大路径和solution:递归求解问题:① 最大路径可能是以当前节点值和左右子树的路径和② 函数返回值为以root为根节点的最大路径③ 递归更新最大路径class Solution {public: int res = INT_MIN; //定义返回值 int maxPathSum(TreeNode* root) { countPath(root); return res; } .原创 2022-05-20 12:52:04 · 243 阅读 · 0 评论 -
面试题 04.06. 后继者
原题链接:面试题 04.06. 后继者solution: 递归调用。 ①如果当前子树为空,返回nullptr ② 如果目标val大于等于当前root值,去右子树中查找,如果右子树中没有找到返回nullptr. ③ 如果目标val小于当前root值,去左子树中查找,如果找到则返回node,否则返回当前根节点class Solution {public: TreeNode* inorderSuccessor(TreeNo...原创 2022-05-16 10:25:17 · 176 阅读 · 0 评论 -
105. 从前序与中序遍历序列构造二叉树
原题链接:105. 从前序与中序遍历序列构造二叉树solution: 二叉树的前序遍历:根左右 二叉树的中序遍历:左根右经过前序遍历和中序遍历的节点数组如下:算法具体步骤: ①前序遍历中的第一个节点就是当前树的根节点 ②在中序遍历中找到根节点的位置pos,根节点左边都是其左子树,右边是其右子树 ③假设在中序遍历数组中左中树的长度为k,则前序遍历数组中根节点后的k个数是左子树 ④根据以上特...原创 2022-05-11 10:37:14 · 181 阅读 · 0 评论 -
538. 把二叉搜索树转换为累加树
原题链接:538. 把二叉搜索树转换为累加树solution: 反向中序遍历+递归class Solution {public: int sum = 0; TreeNode* convertBST(TreeNode* root) { if(root == nullptr) return root; convertBST(root->right); root->val += sum; ...原创 2022-05-10 12:23:45 · 103 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
原题链接:236. 二叉树的最近公共祖先solution:递归进行查找节点p和q,并且给定子树中一定存在p和q函数表示对于当前树的查找已经完毕, 否则对左右子树进行查找, 根据左右子树的返回值判断: 1. 左右子树的返回值都不为nullptr, 由于值唯一左右子树的返回值就是p和q, 此时root为根节点 2. 如果左右子树返回值只有一个不为nullptr, 说明p和q共同存在于当前节点的左子树或右子树中/** * Definition for a.原创 2022-05-10 12:03:59 · 92 阅读 · 0 评论 -
95. 不同的二叉搜索树 II
原题链接:95. 不同的二叉搜索树 IIsolution:①在区间[l,r]枚举每个以i为根节点的二叉搜索树,用left保存区间[l,i - 1]构造左子树的集合, 用right保存区间[i + 1,r]构造右子树的集合.② left中保存的每一个左子树的情况都可以和right中保存的右子树的情况构成一个新的二叉搜索树,假设left中有n种,right中有m种,总的方案就有n * m种③递归求解class Solution {public: vector<Tree.原创 2022-05-10 09:50:41 · 171 阅读 · 0 评论 -
208. 实现 Trie (前缀树)
原题链接:208. 实现 Trie (前缀树)solution:class Trie {public: int son[300010][26]; //建立Trie树 int cnt[300010]; //保存以idx位置结尾的单词数量 int idx = 0; Trie() { memset(son, 0 ,sizeof(son)); memset(cnt, 0 ,sizeof(cnt)); }...原创 2022-04-29 15:09:46 · 64 阅读 · 0 评论 -
98. 验证二叉搜索树
原题链接:solution: 二叉搜索树的中序遍历是按升序排列class Solution {public: vector<int> res; void m_dfs(TreeNode *root){ if(root == nullptr) return; if(root->left) m_dfs(root->left); res.push_back(root->val); ...原创 2022-04-25 19:40:05 · 533 阅读 · 0 评论 -
429. N 叉树的层序遍历
原题链接:429. N 叉树的层序遍历solution: 层序遍历/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } Node(int _val, vector<Node*> _children) {...原创 2022-04-08 15:02:50 · 72 阅读 · 0 评论 -
307. 区域和检索 - 数组可修改
原题链接:307. 区域和检索 - 数组可修改前提知识:树状数组(详细分析+应用),看不懂打死我!_鲜果维他命的博客-CSDN博客_树状数组学习树状数组的概念solution:class NumArray {public: int n; vector<int>tr,arr; int lowbit(int x){ return x & -x; } int query(int x){ int.原创 2022-04-06 16:22:05 · 298 阅读 · 0 评论 -
235. 二叉搜索树的最近公共祖先
原题链接:235. 二叉搜索树的最近公共祖先solution:class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(p->val == root->val || q->val == root->val) return root; //如果根节点等于要查找的其中任.原创 2022-03-28 17:13:56 · 81 阅读 · 0 评论 -
98. 验证二叉搜索树
原题链接:98. 验证二叉搜索树solution: 可以对二叉搜索树进行中序遍历,如果得到的数组是升序数组,就一定是二叉搜索树//递归的方式class Solution {public: vector<int> res; //保存中序遍历数组 void inorderTraversal(TreeNode *root) //二叉树中序遍历 { if(root == nullptr) return; if(roo..原创 2022-03-28 15:57:59 · 136 阅读 · 0 评论 -
701. 二叉搜索树中的插入操作
原题链接:701. 二叉搜索树中的插入操作solution:/** * 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..原创 2022-03-28 14:03:40 · 93 阅读 · 0 评论 -
700. 二叉搜索树中的搜索
原题链接:700. 二叉搜索树中的搜索solution:/** * 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), .原创 2022-03-28 13:37:01 · 113 阅读 · 0 评论 -
112. 路径总和
原题链接:112. 路径总和solution:/** * 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(nu.原创 2022-03-26 12:25:37 · 99 阅读 · 0 评论 -
226. 翻转二叉树
原题链接:226. 翻转二叉树solution:前序遍历:class Solution {public: TreeNode* invertTree(TreeNode* root) { //前序遍历 if (root == NULL) return root; swap(root->left, root->right); invertTree(root->left); inv.原创 2022-03-26 11:40:28 · 588 阅读 · 0 评论 -
101. 对称二叉树
原题链接:101. 对称二叉树solution: dfs注意搜索的目标/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x...原创 2022-03-25 11:19:16 · 988 阅读 · 0 评论 -
145. 二叉树的后序遍历
原题链接:145. 二叉树的后序遍历soluition: 递归地方式/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x)...原创 2022-03-24 10:55:29 · 816 阅读 · 0 评论 -
94. 二叉树的中序遍历
原题链接:94. 二叉树的中序遍历solution: 递归地方式/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x)...原创 2022-03-24 09:55:01 · 94 阅读 · 0 评论 -
144. 二叉树的前序遍历
原题链接:144. 二叉树的前序遍历solution: 递归地方式/** * 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.原创 2022-03-24 09:27:58 · 1104 阅读 · 0 评论 -
116. 填充每个节点的下一个右侧节点指针
原题链接:116. 填充每个节点的下一个右侧节点指针solution:/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {} Node(int _val) : val(_val...原创 2022-03-21 22:21:08 · 169 阅读 · 0 评论 -
617. 合并二叉树
原题链接:617. 合并二叉树solution: 递归/** * 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原创 2022-03-21 19:31:19 · 64 阅读 · 0 评论 -
606. 根据二叉树创建字符串
原题链接:606. 根据二叉树创建字符串solution:/** * 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),原创 2022-03-19 10:43:02 · 397 阅读 · 0 评论