二叉树:递归函数什么时候需要返回值?
当初学数据结构的时候也弄不清楚,今天看到一句话很好的解释了:
「如果需要搜索整颗二叉树,那么递归函数就不要返回值,如果要搜索其中一条符合条件的路径,递归函数就需要返回值,因为遇到符合条件的路径了就要及时返回。」
比如:
他并非要遍历全部的二叉树,而是遍历到2就返回了,并非遍历到了全部二叉树.
因此,代码如下
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
if(root == NULL || root->val == val)
return root;
if(val < root->val)
return searchBST(root->left, val);
if(val > root->val)
return searchBST(root->right, val);
return NULL;
}
};
如果 不在递归时候return,就需要稍微做点修改:用临时变量去替代返回的作用,这样相对也好理解。
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
if(root == NULL || root->val == val)
return root;
TreeNode*cur = NULL;
if(val < root->val)
cur = searchBST(root->left, val);
if(val > root->val)
cur = searchBST(root->right, val);
return cur;
}
};