2022-03-19:已知一棵二叉树上所有的值都不一样, 给定这棵二叉树的头节点head, 给定一个整型数组arr,arr里放着不同的值,每个值一定在树上 返回数组里所有值的最低公共祖先。

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-03-19:已知一棵二叉树上所有的值都不一样, 给定这棵二叉树的头节点head, 给定一个整型数组arr,arr里放着不同的值,每个值一定在树上 返回数组里所有值的最低公共祖先。相关的知识,希望对你有一定的参考价值。

2022-03-19:已知一棵二叉树上所有的值都不一样,
给定这棵二叉树的头节点head,
给定一个整型数组arr,arr里放着不同的值,每个值一定在树上
返回数组里所有值的最低公共祖先。

答案2022-03-19:

递归。

代码用golang编写。代码如下:

package main

import "fmt"

func main() 
	root := &TreeNodeval: 1
	root.left = &TreeNodeval: 2
	root.right = &TreeNodeval: 3
	root.left.left = &TreeNodeval: 4
	root.left.right = &TreeNodeval: 5
	root.right.left = &TreeNodeval: 6
	root.right.right = &TreeNodeval: 7
	ret := lowestCommonAncestor(root, []*TreeNoderoot.left.left, root.right.right, root.right.left)
	fmt.Println(ret.val)


type TreeNode struct 
	val   int
	left  *TreeNode
	right *TreeNode


func lowestCommonAncestor(root *TreeNode, nodes []*TreeNode) *TreeNode 
	set := make(map[int]struct)
	for _, node := range nodes 
		set[node.val] = struct
	
	return process(root, set, len(set)).find


type Info struct 
	// 找没找到最低公共祖先
	// 没找到,find = null
	// 找到了最低公共祖先,find是最低公共祖先
	find *TreeNode
	// 我这颗子树上,删掉了几个节点!
	removes int


func NewInfo(f *TreeNode, r int) *Info 
	ans := &Info
	ans.find = f
	ans.removes = r
	return ans


func process(x *TreeNode, set map[int]struct, all int) *Info 
	if x == nil 
		return NewInfo(nil, 0)
	
	left := process(x.left, set, all)
	if left.find != nil 
		return left
	
	right := process(x.right, set, all)
	if right.find != nil 
		return right
	
	cur := 0
	if _, ok := set[x.val]; ok 
		cur = 1
	
	delete(set, x.val)
	if left.removes+right.removes+cur == all 
		return NewInfo(x, all)
	 else 
		return NewInfo(nil, left.removes+right.removes+cur)
	


执行结果如下:


左神java代码

以上是关于2022-03-19:已知一棵二叉树上所有的值都不一样, 给定这棵二叉树的头节点head, 给定一个整型数组arr,arr里放着不同的值,每个值一定在树上 返回数组里所有值的最低公共祖先。的主要内容,如果未能解决你的问题,请参考以下文章

二叉查找树

Validate Binary Search Tree

二叉查找树 详解

已知一棵二叉树的中序和前序序列如下,求该二叉树的后序序列,并画出二叉树

cogs2840. 二叉查找树

二分搜索树实现