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

前言

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

内容

一、二叉搜索树中的搜索

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

最后

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

你可能感兴趣的:(力扣二叉树,leetcode,算法,职场和发展,golang,二叉树)