Leetcode700
1.问题描述
2.解决方案
解法一:递归
思路很简单没什么好说的,就是搜索找到了就比较
1.递归出口确定好
2.由于是找到了就直接返回,所以不需要搜索完全树,所以递归函数有返回值,这个前面已经清楚的讨论过了有关于递归函数返回值的讨论
3.根据大小关系进行左右子树递归
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
if(root== nullptr) return nullptr;
if(root->val==val) return root;
if(val>root->val) return searchBST(root->right,val);
if(val<=root->val) return searchBST(root->left,val);
//如果都没找到那就返空
return nullptr;
}
};
解法二:迭代
迭代法不需要用队列栈模拟,因为没有回溯这一过程,具体见这篇博客普通二叉树和二叉搜索树在迭代法上面的区别,所以呢二叉搜索树的迭代非常好写
1.while(root!=nullptr)
2.root一直往下赋值遍历就好
class Solution1 {
public:
TreeNode* searchBST(TreeNode* root, int val) {
while(root!= nullptr){
if(val==root->val) return root;
if(val>root->val) root=root->right;
else root=root->left;
}
return nullptr;
}
};