改造二叉树

给定一棵二叉树,需要将其转换为二叉搜索树,目标是最少修改次数。文章介绍了不同解题思路,包括利用二叉搜索树的中根遍历性质,以及通过最长不下降子序列来确定最少修改次数,算法复杂度为O(nlogn)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一月20日

Description

什么是二叉搜索树呢?二叉搜索树首先是一棵二叉树。设 k e y [ p ] key[p] key[p] 表示结点 p p p 上的数值。对于其中的每个结点p,若其存在左孩子 l c h lch lch ,则 k e y [ p ] &gt; k e y [ l c h ] key[p]&gt;key[lch] key[p]>key[lch] 若其存在右孩子 r c h rch rch ,则 k e y [ p ] &lt; k e y [ r c h ] key[p]&lt;key[rch] key[p]<key[rch] 注意,本题中的二叉搜索树应满足对于所有结点,其左子树中的 k e y key key 小于当前结点的 k e y key key ,其右子树中的 k e y key key 大于当前结点的 k e y key key

现在给定一棵二叉树,可以任意修改结点的数值。修改一个结点的数值算作一次修改,且这个结点不能再被修改。若要将其变成一棵二叉搜索树,且任意时刻结点的数值必须是整数(可以是负整数或0),所要的最少修改次数。相信这一定难不倒你!

Input

第一行一个正整数 n n n 表示二叉树结点数。结点从 1 ∼ n 1\thicksim n 1n进行编号。

第二行 n n n 个正整数用空格分隔开,第 i i i 个数 a i a_i ai 表示结点 i i i 的原始数值。

此后 n − 1 n - 1 n1 行每行两个非负整数 f a fa fa , c h ch ch ,第 i + 2 i + 2 i+2 行描述结点 i + 1 i + 1 i+1 的父亲编号 f a fa fa ,以及父子关系 c h ch ch ,( c h = 0 ch = 0 ch=0 表示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值