LeetCode700. 二叉搜索树中的搜索

题目

代码

简单递归

 1 class Solution {
 2 public:
 3     TreeNode* searchBST(TreeNode* root, int val) {
 4         if(!root) return NULL;
 5         TreeNode* p;
 6         if(root->val == val) return root;
 7         if(root->val > val) p = searchBST(root->left,val);
 8         if(root->val < val) p = searchBST(root->right,val);
 9         return p;
10     }
11 };
1 class Solution {
2 public:
3     TreeNode* searchBST(TreeNode* root, int val) {
4         if(root == NULL || root->val == val) return root;
5         if(root->val > val) return searchBST(root->left,val);
6         if(root->val < val) return searchBST(root->right,val);
7         return NULL;
8     }
9 };

在递归遍历的时候,什么时候直接return 递归函数的返回值,什么时候不用加这个 return呢? 根据代码随想录的Carl学长所说,如果要搜索一条边,递归函数就要加返回值,这里也是一样的道理。

因为搜索到目标节点了,就要立即return了,这样才是找到节点就返回(搜索某一条边),如果不加return,就是遍历整棵树了。

迭代

 1 class Solution {
 2 public:
 3     TreeNode* searchBST(TreeNode* root, int val) {
 4         while(root!=NULL){
 5             if(root->val == val) return root;
 6             else if(root->val > val) root = root->left;
 7             else root = root->right;
 8         }
 9         return NULL;
10     }
11 };

 

posted @ 2021-01-12 17:18  Uitachi  阅读(60)  评论(0编辑  收藏  举报