本文主要是介绍力扣二叉树--第三十五天,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
二叉搜索树,写了一道题,第二题没写出来。明天再写吧。。。
内容
一、二叉搜索树中的搜索
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 resultreturn searchBST(root.Left,val)}//习惯直接写 searchBST(root.left, val),却忘了递归函数还有返回值
// result:=searchBST(root.Right,val)
// return resultreturn 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
}
最后
怎么写了十天的递归迭代,遇到题还是写不出来。。。沉淀!
这篇关于力扣二叉树--第三十五天的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!