赞
踩
开始接触二叉搜索树。这是进入二叉搜索树的第一篇。
记录 五十三【700.二叉搜索树中的搜索】
给定二叉搜索树(BST)的根节点 root 和一个整数值 val。
你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。
示例 1:
输入:root = [4,2,7,1,3], val = 2
输出:[2,1,3]
示例 2:
输入:root = [4,2,7,1,3], val = 5
输出:[]
提示:
树中节点数在 [1, 5000] 范围内
1 <= Node.val <= 10^7
root 是二叉搜索树
1 <= val <= 10^7
/** * 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) { if(!root){//是否是空节点 return nullptr; } //遍历 if(root->val == val){ return root; }else if(root->val < val){ return searchBST(root->right,val); }else if(root->val > val){ return searchBST(root->left,val); } return nullptr;//默认。合理不会走到这 } };
空节点和相等时,可以合并成return root。同时作为终止条件。
先定义result = nullptr接收返回值。
递归另一种代码实现:
/** * 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) { if(!root || root->val == val){//是否是空节点 return root; } TreeNode* result = nullptr; if(root->val < val){ result= searchBST(root->right,val); }else if(root->val > val){ result = searchBST(root->left,val); } return result; } };
迭代法:思路肯定一样。本题好处:二叉搜索树给了下一步的走向,往左子树走还是往右子树走。
迭代法代码实现:
/** * 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* cur = root; while(cur){ if(cur->val == val) return cur; else if(cur->val > val) cur = cur->left; else if(cur->val < val) cur = cur->right; } return nullptr; } };
对比参考代码:一样。
【700.二叉搜索树中的搜索】
(欢迎指正,转载标明出处)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。