文章目录
前言
刷题坚持每一天,以下题目引用自:力扣(LeetCode)
💎一、题目一
🏆1.题目描述
原题链接:700. 二叉搜索树中的搜索
给定二叉搜索树(BST)的根节点 root 和一个整数值 val。
你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。
示例 1:
输入:root = [4,2,7,1,3], val = 2
输出:[2,1,3]
🏆2.解题思路
🔑思路:
前序遍历,当节点值等于val时,返回当前节点的链接。
🏆3.代码详解
struct TreeNode* dfs(struct TreeNode* root, int val){
if(!root || root->val == val) return root;
if(root->val > val){
return dfs(root->left, val);
}
if(root->val < val){
return dfs(root->right, val);
}
return;
}
struct TreeNode* searchBST(struct TreeNode* root, int val){
if(root == NULL) return NULL;
return dfs(root, val);
}
💎二、题目二
🏆1.题目描述
原题链接:剑指 Offer 54. 二叉搜索树的第k大节点
给定一棵二叉搜索树,请找出其中第 k 大的节点的值。
示例 1:
输入: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
2
输出: 4
🏆2.解题思路
🔑思路:
根据二叉搜索树的特性,中序遍历获取值集合,返回第
k
大的值。
🏆3.代码详解
void inorder(struct TreeNode* root, int* ans, int* idx){
if(root != NULL){
inorder(root->left, ans, idx);
ans[(*idx)++] = root->val;
inorder(root->right, ans, idx);
}
return ;
}
int kthLargest(struct TreeNode* root, int k){
int* ans = (int*)malloc(sizeof(int)*10001);
int idx = 0;
inorder(root, ans, &idx);
return ans[idx-k];
}
💎三、题目三
🏆1.题目描述
原题链接:701. 二叉搜索树中的插入操作
给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。
示例 1:
输入:root = [4,2,7,1,3], val = 5
输出:[4,2,7,1,3,5]
🏆2.解题思路
🔑思路:
使用前序遍历找到空节点把节点插入。
🏆3.代码详解
struct TreeNode* insertIntoBST(struct TreeNode* root, int val){
if(root == NULL){
struct TreeNode* newnode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
newnode->val = val;
newnode->left = NULL;
newnode->right = NULL;
return newnode;
}
if(root->val > val){
root->left = insertIntoBST(root->left, val);
}
else{
root->right = insertIntoBST(root->right, val);
}
return root;
}
💎四、题目四
🏆1.题目描述
原题链接:面试题 04.05. 合法二叉搜索树
实现一个函数,检查一棵二叉树是否为二叉搜索树。
示例 1:
输入:
2
/ \
1 3
输出: true
🏆2.解题思路
🔑思路:
中序遍历,当前节点值小于或等于上一节点值,不是二叉搜索树,给
ans
赋值false
。
🏆3.代码详解
bool ans;
void dfs(struct TreeNode* root, int* prev){
if(root == NULL) return ;
dfs(root->left, prev);
if((*prev) != -1){
if((*prev) >= root->val) ans = false;
}
(*prev) = root->val;
dfs(root->right, prev);
}
bool isValidBST(struct TreeNode* root){
int prev = -1;
ans = true;
dfs(root, &prev);
return ans;
}
💎五、星球推荐
星球链接:英雄算法联盟
星球里有什么?
【朋友圈】一个极致精准的自律、编程、算法的小圈子。
【算法集训】以月为单位组织算法集训,每天四题,风雨无阻。
【排行榜】每天、每周都会有榜单,激励大家不断进步,不断成长。
【个人规划】每个人都写好自己的规划,也可以查看他人的规划,时刻警醒自己不掉队。
【打卡挑战】每日一题打卡、每日早起打卡、算法集训打卡、规划完成情况打卡。
在星球里做什么?
目前星球人数达到520+,在星球里你能够遇到一群志同道合之人,因为都是花钱进来的,你不会看到任何浑水摸鱼的人,每个人都有自己的每月规划,星主每月都会组织算法集训,每天一起刷题,你可以看到别人的解题报告,取其之长,补己之短。