二叉树系列验证二叉搜索树&二叉搜索树的最小绝对差&二叉搜索树中的众数&二叉树的最近公共祖先

Posted liu_dudu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树系列验证二叉搜索树&二叉搜索树的最小绝对差&二叉搜索树中的众数&二叉树的最近公共祖先相关的知识,希望对你有一定的参考价值。

验证二叉搜索树

//98. 验证二叉搜索树
func isValidBST(root *TreeNode) bool
return isValidBSTV1(root,math.MinInt8,math.MaxInt8)

func isValidBSTV1(root *TreeNode,min,max int) bool
if root==nil
return true

if min>=root.Val || root.Val>=max
return false

return isValidBSTV1(root.Left,min,root.Val) &&
isValidBSTV1(root.Right,root.Val,max)


//98. 验证二叉搜索树
func isValidBSTV2(root *TreeNode) bool
var trace func(node *TreeNode) bool
var pre *TreeNode
trace= func(node *TreeNode) bool
if node==nil
return true

leftRes:=trace(node.Left)
/*
利用二叉搜索树的特性,左小于根,根大于右,利用中序遍历,则是左根右,恰好是升序遍历
二叉树不能有重复节点,故等于也是false
故前一个节点大于等于当前节点则 false
*/
if pre!=nil && pre.Val>=node.Val
return false

pre=node
rightRes:=trace(node.Right)
return leftRes && rightRes

return trace(root)

二叉搜索树的最小绝对差

//二叉搜索树的最小绝对差
func getMinimumDifference(root *TreeNode) int
var arr []int
traceTree(root,&arr)
arrLen:=len(arr)
val:=1000000
fmt.Printf("arrLen:%d \\n",arrLen)
for i := 1; i < arrLen; i++
temp:=arr[i]-arr[i-1]
fmt.Printf("temp:%d,val:%d\\n",temp,val)
if val>temp
val=temp


return val

func traceTree(root *TreeNode,arr *[]int)
//递归中序遍历
if root==nil
return

traceTree(root.Left,arr)
*arr=append(*arr, root.Val)
traceTree(root.Right,arr)


//二叉搜索树的最小绝对差
func getMinimumDifferenceV1(root *TreeNode) int
val:=1000000
if root==nil
return val

lt:=list.New()
cur:=root
var arr []int
for lt.Len()>0 || cur!=nil
if cur!=nil
lt.PushBack(cur)
cur=cur.Left
else
node:=lt.Remove(lt.Back()).(*TreeNode)
if node!=nil
arr=append(arr, node.Val)
cur=node.Right



fmt.Printf("len arr:%d \\n",len(arr))
return val

 二叉搜索树中的众数

// 二叉搜索树中的众数
func findMode(root *TreeNode) []int
var arr []int
var trace func(node *TreeNode)
var pre *TreeNode
count,maxVal:=1,1
trace= func(node *TreeNode)
if node==nil
return

trace(node.Left)
if pre!=nil && pre.Val==node.Val
count++
else
count=1

if count>=maxVal
fmt.Printf("count:%d,max:%d,arr:%v \\n",count,maxVal,arr)
if count>maxVal && len(arr)>0
arr=nil
arr=append(arr, node.Val)
else
arr=append(arr, node.Val)

maxVal=count

pre=node
trace(node.Right)

trace(root)
return arr

236. 二叉树的最近公共祖先

//236. 二叉树的最近公共祖先
func lowestCommonAncestorV1(root, p, q *TreeNode) *TreeNode
if root==nil
return nil

lt:=list.New()
lt.PushBack(root)
var temp,temp1 *TreeNode
for lt.Len()>0
node:=lt.Remove(lt.Front()).(*TreeNode)
if node.Val==p.Val
temp=node.Left

if node.Left!=nil && node.Left.Val==p.Val && node.Right!=nil && node.Right.Val==q.Val
return root
else if node.Left!=nil && node.Left.Val==p.Val
lt.PushBack(node.Left)
temp=node.Left
else if node.Right!=nil && node.Right.Val==q.Val
lt.PushBack(node.Right)
temp1=node.Right


if temp!=nil && temp1!=nil
return temp1

return temp


//236. 二叉树的最近公共祖先
func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode
if root==nil
return nil

if root==p || root==q
return root

left:=lowestCommonAncestor(root.Left,p,q)
right:=lowestCommonAncestor(root.Right,p,q)
if left!=nil && right!=nil
return root

if left!=nil
return left

if right!=nil
return right

return nil


以上是关于二叉树系列验证二叉搜索树&二叉搜索树的最小绝对差&二叉搜索树中的众数&二叉树的最近公共祖先的主要内容,如果未能解决你的问题,请参考以下文章

二叉树刷题篇(11) 二叉搜索树的最小绝对差与众数

代码随想录算法训练营第14天|530.二叉搜索树的最小绝对差501.二叉搜索树中的众数236.二叉树的最近公共祖先

⭐算法入门⭐《二叉树 - 二叉搜索树》简单07 —— LeetCode 530. 二叉搜索树的最小绝对差

LeetCode Algorithm 530. 二叉搜索树的最小绝对差

Java 求解二叉搜索树的最小绝对差

530. 二叉搜索树的最小绝对差