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