代码随想录Day31
LeetCode700.二叉搜索树中的搜索
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。
例如:

递归法三部曲:
1.传参和返回 传入根节点和目标值,返回对应的根节点。
2.确定终止条件 终止条件是找到对应目标值或者走到底还没找到目标值
3.确定单层逻辑 由于是二叉搜索树,左节点都小于根节点,右节点都大于根节点,所以可以通过值来判断左右
TreeNode* result = NULL; if (root->val > val) result = searchBST(root->left, val); if (root->val < val) result = searchBST(root->right, val); return result
代码:
class Solution { // 递归,普通二叉树 public TreeNode searchBST(TreeNode root, int val) { if (root == null || root.val == val) { return root; } TreeNode left = searchBST(root.left, val); if (left != null) { return left; } return searchBST(root.right, val); } } class Solution { // 递归,利用二叉搜索树特点,优化 public TreeNode searchBST(TreeNode root, int val) { if (root == null || root.val == val) { return root; } if (val < root.val) { return searchBST(root.left, val); } else { return searchBST(root.right, val); } } } class Solution { // 迭代,普通二叉树 public TreeNode searchBST(TreeNode root, int val) { if (root == null || root.val == val) { return root; } Stack<TreeNode> stack = new Stack<>(); stack.push(root); while (!stack.isEmpty()) { TreeNode pop = stack.pop(); if (pop.val == val) { return pop; } if (pop.right != null) { stack.push(pop.right); } if (pop.left != null) { stack.push(pop.left); } } return null; } } class Solution { // 迭代,利用二叉搜索树特点,优化,可以不需要栈 public TreeNode searchBST(TreeNode root, int val) { while (root != null) if (val < root.val) root = root.left; else if (val > root.val) root = root.right; else return root; return null; } }

浙公网安备 33010602011771号