微信公众号:CurryCoder的程序人生
业精于勤,荒于嬉;行成于思,毁于随
1.题目描述
2.题解
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
class Solution
{
public:
/*
二叉搜索树是一个有序树,特点如下:
(1).若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值
(2).若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3).它的左、右子树也分别为二叉搜索树
*/
// 递归法:因为要检索二叉树的单条边,因此递归函数需要有返回值!
// 1.确定函数入参及返回值
TreeNode *searchBST(TreeNode *root, int val)
{
// 2.确定递归终止条件:如果给定的二叉搜索树为空或找到给定的值,则返回root
if (root == nullptr || root->val == val)
return root;
// 3.确定单层递归逻辑:给定值比根节点小,则在左子树中搜索给定值;反之,则在右子树中搜索给定值;
if (root->val > val)
return searchBST(root->left, val);
if (root->val < val)
return searchBST(root->right, val);
return nullptr;
}
};
// 迭代法:一般是使用栈来模拟深度遍历或者使用队列来模拟广度遍历,但是二叉搜索树的节点是有序性的,它确定了搜索的方向,可以不使用辅助栈或者队列
class Solution
{
public:
TreeNode *searchBST(TreeNode *root, int val)
{
while (root != nullptr)
{
if (root->val > val)
root = root->left;
else if (root->val < val)
root = root->right;
else
return root;
}
return nullptr;
}
};
觉得不错,请一键三连吧↓↓↓