题目来源于知识星球—英雄算法联盟,六月算法集训专题
目录
前言
跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!
一、700.二叉搜索树中的搜索(简单)
1.题目描述
2.解题思路
由于这棵树是有序的,所以二叉搜索树中的查找类似于二分查找;
1.如果根节点为空,则返回空;
2.如果值小于当前根节点的值,则去左子树查找;
3.如果值大于当前根节点的值,则去右子树查找;
4.如果等于,直接返回;
3.代码演示(C++)
class Solution
{
public:
TreeNode* searchBST(TreeNode* root, int val)
{
if(root==nullptr)
{
return nullptr;
}
else if(val<root->val)
{
return searchBST(root->left,val);
}
else if(val>root->val)
{
return searchBST(root->right,val);
}
return root;
}
};
4.题目链接
二、剑指 Offer 54.二叉搜索树的第K大节点(简单)
1.题目描述
2.解题思路
利用中序遍历将二叉搜索树中的元素排序得到有序序列,然后返回第K大的数即可
3.代码演示(C++)
class Solution
{
#define maxn 500005
int val[maxn];
int n;
void inorder(struct TreeNode *root)
{
if(root)
{
inorder(root->left);
val[n++]=root->val;
inorder(root->right);
}
}
public:
int kthLargest(TreeNode* root, int k)
{
n=0;
inorder(root);
return val[n-k];
}
};
4.题目链接
三、701.二叉搜索树中的插入操作(中等)
1.题目描述
2.解题思路
利用中序遍历。
3.代码演示(C++)
class Solution
{
public:
TreeNode* insertIntoBST(TreeNode* root, int val)
{
if(root == NULL)
{
return new TreeNode(val);
}
if(val < root->val)
{
root->left = insertIntoBST(root->left, val);
}
else if(val > root->val)
{
root->right = insertIntoBST(root->right, val);
}
return root;
}
};
4.题目链接
四、面试题 04.05.合法二叉搜索树(中等)
1.题目描述
2.解题思路
采用递归的思想,每次都进行判断:根节点的左子树所有元素的值都小于
根节点的值,根节点的右子树所有元素的值都大于根节点的值。
3.代码演示(C++)
class Solution
{
public:
bool helper(TreeNode* root, long long lower, long long upper)
{
if (root == nullptr)
{
return true;
}
if (root -> val <= lower || root -> val >= upper)
{
return false;
}
return helper(root -> left, lower, root -> val) && helper(root -> right, root -> val, upper);
}
bool isValidBST(TreeNode* root)
{
return helper(root, LONG_MIN, LONG_MAX);
}
};
4.题目链接
总结
每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!