Every day a leetcode
题目来源:700. 二叉搜索树中的搜索
解法1:递归
二叉搜索树满足如下性质:
- 左子树所有节点的元素值均小于根的元素值;
- 右子树所有节点的元素值均大于根的元素值。
据此可以得到如下算法:
若 root 为空则返回空节点;
- 若 root->val==val,则返回 root;
- 若 root->val>val,递归左子树;
- 若 root->val<val,递归右子树。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* searchBST(struct TreeNode* root, int val){
if(root == NULL) return NULL;
if(root->val == val) return root;
return searchBST(root->val>val?root->left:root->right,val);
}
结果:
解法2:迭代
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* searchBST(struct TreeNode* root, int val){
while(root)
{
if(root->val == val) return root;
root=root->val>val?root->left:root->right;
}
return NULL;
}
结果: