java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 |
---|
文章目录
- 1. 法一:递归
- 2. 法二:迭代法
解题思路:时间复杂度和空间复杂度都是O(n) |
---|
- 如果目标值val,和当前结点值一样,就返回当前结点。
- 如果目标值val,比当前结点小,就去左子树找。
- 如果目标值val,比当前结点大,就去右子树找。
- 如果当前结点为null,说明找不着,返回null
1. 法一:递归
代码 |
---|
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if(root == null) return null;//如果root==null,说明找不到
if(root.val == val) return root;//如果正好相等,说明找到了
else if(root.val > val) return searchBST(root.left,val);//如果val比当前结点小,去左子树
else return searchBST(root.right,val);//如果val比当前结点大,去右子树
}
}
2. 法二:迭代法
代码 |
---|
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if(root == null) return null;//如果root==null,说明找不到
Deque<TreeNode> stack = new LinkedList<>();//模拟栈
stack.push(root);//先入栈根节点
while(!stack.isEmpty()){//如果没有遍历完成就继续
TreeNode node = stack.pop();//出栈
if(node == null) return null;//如果为null就返回null表示没找着
else if(val == node.val) return node;//如果正好相等就找到了
else if(val < node.val) stack.push(node.left);//如果val比当前节点小,就去左子树
else stack.push(node.right);//如果val比当前结点大,就去右子树
}
return null;
}
}