700. Search in a Binary Search Tree
仅供自己学习
思路:
因为是二叉搜索树,所以我们遍历树即可,判断他是否等于val,等于就直接返回这个节点,如果小于,就指向节点的右子树,如果大于,就指向节点的左子树。如果循环结束还没找到就return NULL即可
代码:
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val(0), left(nullptr), right(nullptr) {} 8 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} 9 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} 10 * }; 11 */ 12 class Solution { 13 public: 14 TreeNode* searchBST(TreeNode* root, int val) { 15 TreeNode* temp =root; 16 while(temp!=NULL){ 17 if(temp->val==val) return temp; 18 else if(temp->val<val) temp=temp->right; 19 else temp=temp->left; 20 } 21 return NULL; 22 } 23 };
骇客通过递归的方式,判断root是否为NULL,如果为NULL就返回NULL,如果一直没找到就会找到底直接返回NULL了,如果root->val<val,那么就传入root->right,反之传入root->left。
代码:
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val(0), left(nullptr), right(nullptr) {} 8 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} 9 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} 10 * }; 11 */ 12 class Solution { 13 public: 14 TreeNode* searchBST(TreeNode* root, int val) { 15 if(!root) return NULL; 16 if(root->val==val) return root; 17 return root->val>val?searchBST(root->left,val):searchBST(root->right,val); 18 } 19 };