前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2022-03-19:已知一棵二叉树上所有的值都不一样, 给定这棵二叉树的头节点head, 给定一个整型数组arr,arr里放着不同的值,每个值一定在树上 返回

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

原创
作者头像
福大大架构师每日一题
发布2022-03-19 19:34:00
4900
发布2022-03-19 19:34:00
举报
文章被收录于专栏:福大大架构师每日一题

2022-03-19:已知一棵二叉树上所有的值都不一样,

给定这棵二叉树的头节点head,

给定一个整型数组arr,arr里放着不同的值,每个值一定在树上

返回数组里所有值的最低公共祖先。

答案2022-03-19:

递归。

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

代码语言:go
复制
package main

import "fmt"

func main() {
	root := &TreeNode{val: 1}
	root.left = &TreeNode{val: 2}
	root.right = &TreeNode{val: 3}
	root.left.left = &TreeNode{val: 4}
	root.left.right = &TreeNode{val: 5}
	root.right.left = &TreeNode{val: 6}
	root.right.right = &TreeNode{val: 7}
	ret := lowestCommonAncestor(root, []*TreeNode{root.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)
	}
}

执行结果如下:

在这里插入图片描述
在这里插入图片描述

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档