题意理解:
首先明确二叉搜索树的定义:
根节点的值大于左子树所有节点值,小于右子树所有节点值。
二叉搜索树有其自己的顺序,不需要刻意强调遍历顺序。
解题方法:
递归和遍历都可以用。因为是在树里按照一定的规律找一个节点,所以只是走一条路径。两个方法都很简单。
1.递归
public TreeNode searchBST2(TreeNode root, int val) {//如果根节点为空则返回空//如果根节点值与目标值相等,返回根节点if(root==null||root.val==val) return root;TreeNode result=null;//根节点值大于目标值,从左边找if(root.val>val) result=searchBST2(root.left,val);//根节点值小于目标值,从右边找if(root.val<val) result=searchBST2(root.right,val);//返回查找结果,如果找不到,则返回nullreturn result;}
2.递归
仅有一条路径去找目标值,所以其实不需要使用栈存储节点状态
public TreeNode searchBST(TreeNode root, int val) {while (root!=null){//控制查找方向if(root.val>val){//左找root=root.left;}else if(root.val<val){//右找root=root.right;}else{//找到了return root;}}return null;}
3.分析
时间复杂度:
递归:O(1)
迭代:O(1)
空间复杂度:
递归:O(1)
迭代:O(1)