难度简单93
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。
例如,
给定二叉搜索树: 4 / \ 2 7 / \ 1 3 和值: 2你应该返回如下子树:
2 / \ 1 3在上述示例中,如果要找的值是
5
,但因为没有节点值为5
,我们应该返回NULL
。
解题思路
参考代码随想录
见代码注释
/**迭代
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
while(root != nullptr){//因为是有序的树,节点不为空不断往下找
if(val == root->val) return root;//找到,直接返回
else if(val < root->val) root = root->left; //val小于节点值,找左子树
else if(val > root->val) root = root->right;//val大于节点值,找右子树
}
return root;
}
};
/**递归
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
if(root == nullptr || root->val == val) return root; //节点为空或者节点值即为所求
if(val < root->val) return searchBST(root->left, val); //val小于节点值,找左子树
if(val > root->val) return searchBST(root->right, val);//val大于节点值,找右子树
return nullptr;
}
};