package com.atuigu.java;
import java.util.Stack;
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;
}
TreeNode right = searchBST(root.right, val);
if(right != null){
return right;
}
return null;
}
// 递归,利用二叉搜索树特点,优化
public TreeNode searchBST1(TreeNode root, int val) {
if(root == null || root.val == val){
return root;
}
if(val < root.val){
return searchBST1(root.left, val);
}else{
return searchBST1(root.right, val);
}
}
// 迭代,普通二叉树
public TreeNode searchBST2(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;
}
//提前加入stack中 为下次while循环做准备
if(pop.right != null){
stack.push(pop.right);
}
if(pop.left != null){
stack.push(pop.left);
}
}
return null;
}
// 迭代,利用二叉搜索树特点,优化,可以不需要栈
public TreeNode searchBST3(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 root;
}
}
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;
}
}
6.19 二叉搜索树中的搜索——【LeetCode】
最新推荐文章于 2024-07-27 17:56:15 发布