二叉搜索树中的搜索(力扣700)
首先介绍一下什么是二叉搜索树。
二叉搜索树是一个有序树:
- 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
- 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
- 它的左、右子树也分别为二叉搜索树;
这就决定了,二叉搜索树,递归遍历和迭代遍历和普通二叉树都不一样。
就本题而言,我们使用递归法,遍历的顺序取决于节点的值的大小。而不是传统的前中后序。
大家可以结合我的代码以及注释理解此题。
代码及注释如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: TreeNode* searchBST(TreeNode* root, int val) { //创建一个变量存放递归函数的返回值 TreeNode* result; //终止条件1:遍历到空节点 if(root == NULL) return NULL; //终止条件2:遍历到的节点值等与val if(root -> val == val) return root; //如果当前节点值较大,则左递归 if(root -> val > val){ result = searchBST(root -> left,val); } //如果当前节点值较小,则右递归 if(root -> val < val){ result = searchBST(root -> right,val); } return result; } };