/**
* 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)
{
int i,j;
int queue_size;
TreeNode* my_root=nullptr;
TreeNode* process_node;
queue<TreeNode*> my_queue;
my_queue.push(root);
while(!my_queue.empty())
{
//因为本身树具有二分的特点 一次好像只要压入一个就可以了
process_node=my_queue.front(); //取出头结点
my_queue.pop();
if(process_node->val>val) //当前值比目标值大 需要压入左边的节点
{
if(process_node->left==nullptr) break;
else my_queue.push(process_node->left);
}
else if(process_node->val<val) //当前值比目标值小 需要压入右边的节点
{
if(process_node->right==nullptr) break;
else my_queue.push(process_node->right);
}
else
{
my_root=process_node;
}
}
return my_root;
// return root;
}
};