题目来源
题目描述
题目解析
注意,二叉搜索树,一定要利用搜索的特性
递归
首先判空,如果当前结点不存在,直接返回空。如果当前结点值等于目标值,返回当前结点。接下来就看如果当前结点值大于目标值,则对左子结点调用递归函数,否则就对右子结点调用递归函数
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if (root == null){
return null;
}
if (root.val == val){
return root;
}else if (root.val > val){
return searchBST(root.left, val);
}else {
return searchBST(root.right, val);
}
}
}
TreeNode* searchBST(TreeNode* root, int val) {
if(root == NULL){
return root;
}
if(root->val == val){
return root;
}else if(root->val > val){
return searchBST(root->left, val);
}else{
return searchBST(root->right, val);
}
}
迭代
- 不需要已经判断过的节点,因为使用while就可以将递归改成迭代了;
- 如果需要回到已经遍历过的节点,对于相关递归,就需要一个栈来存储之前的节点
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
while (root != null && root.val != val){
if (root.val > val){
root = root.left;
}else {
root = root.right;
}
}
return root;
}
}
TreeNode* searchBST(TreeNode* root, int val) {
TreeNode* iter = root;
while (iter ){
if(iter->val == val){
break;
}else if(iter->val > val){
iter = iter->left;
}else{
iter = iter->right;
}
}
return iter;
}