力扣二叉树--第三十五天

前言

二叉搜索树,写了一道题,第二题没写出来。明天再写吧。。。

内容

一、二叉搜索树中的搜索

700. 二叉搜索树中的搜索

给定二叉搜索树(BST)的根节点 root 和一个整数值 val

你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。

递归

二叉搜索树,也称二叉排序树或二叉查找树

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉搜索树

时间复杂度:O(N),其中 N 是二叉搜索树的节点数。最坏情况下二叉搜索树是一条链,且要找的元素比链末尾的元素值还要小(大),这种情况下我们需要递归 N 次。

空间复杂度:O(N)。最坏情况下递归需要 O(N) 的栈空间。

func searchBST(root *TreeNode, val int) *TreeNode {
  if root==nil{
     return root
  }
  if root.Val==val{
      return root
  }
  if root.Val>val{
    // result:= searchBST(root.Left,val)
    // return result
    return searchBST(root.Left,val)
  }
  //习惯直接写 searchBST(root.left, val),却忘了递归函数还有返回值
//   result:=searchBST(root.Right,val)
//    return result
   return searchBST(root.Right,val)
}
迭代

节点的有序性就帮我们确定了搜索的方向

时间复杂度:O(N),其中 N 是二叉搜索树的节点数。最坏情况下二叉搜索树是一条链,且要找的元素比链末尾的元素值还要小(大),这种情况下我们需要递归 N 次。

空间复杂度:O(1)。没有使用额外的空间。

func searchBST(root *TreeNode,val int)*TreeNode{
    for root!=nil{
        if root.Val>val{
            root=root.Left
        }else if root.Val<val{
            root=root.Right
        }else{
            return root
        }
    }
    return nil
}

最后

怎么写了十天的递归迭代,遇到题还是写不出来。。。沉淀!

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值