700.二叉搜索树中的搜索

一、题目描述

给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。

例如,

1
2
3
4
5
6
7
8
9
给定二叉搜索树:

4
/ \
2 7
/ \
1 3

和值: 2

你应该返回如下子树:

1
2
3
  2     
/ \
1 3

在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL

二、题解

1.二叉搜索树的遍历

1.1 思路

  1. 根节点的值大于val时,根节点指向左孩子;
  2. 根节点的值小于val时,根节点指向右孩子;
  3. 否则返回根节点

1.2 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* 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;
while (root != NULL)
{
if (root->val > val)
root = root->left;
else if (root->val < val)
root = root->right;
else
return root;
}
return NULL;
}