0700.二叉搜索树中的搜索
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
if (root == NULL) return NULL;
if (root->val == val) return root;
TreeNode* result = new TreeNode;
if (root->val > val) result = searchBST(root->left, val);
if (root->val < val) result = searchBST(root->right, val);
return result;
}
};
- ac
- 递归代码思路大体上没问题 但是对于返回结果这部分有些问题---见下
- 关于result这个变量的定义和使用还不熟悉本质原因-----对递归的理解有些欠缺
- 能想到如果要去分别遍历左子树 右子树 那么需要调用自己这个函数本身 但是函数需要一个返回值来承接 能想到或许需要定义一个TreeNode*类型的结点node-----------其实就是上述代码里的result 但是想不到最后需要return node------------即上述代码return result;
- 对于返回值的处理 也可以这样
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
if (root == NULL || root->val == val) return root;
if (root->val > val) return searchBST(root->left, val);
if (root->val < val) return searchBST(root->right, val);
return NULL;
}
};
- 有必要好好比较比较上述两段代码
- 迭代法代码见下
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
if (root == NULL) return NULL;
while (root != NULL) {
if (root->val == val) return root;
if (root->val > val) root = root->left;
else
root = root->right;
}
return NULL;
}
};
- 上面是我的 ac 下面是卡哥的ac
- 注意 while里如果是三个if 那么前面的执行结果会影响到后面的 三个if不是并列!!!!
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
while (root != NULL) {
if (root->val > val) root = root->left;
else if (root->val < val) root = root->right;
else return root;
}
return NULL;
}
};
标签:NULL,return,val,root,搜索,searchBST,TreeNode,0700,树中
From: https://www.cnblogs.com/deservee/p/16989772.html