题目
代码
简单递归
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 };