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 };
原文地址:https://www.cnblogs.com/fresh-coder/p/14268014.html