日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

改造二叉树

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 改造二叉树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description
小Y在學樹論時看到了有關二叉樹的介紹:在計算機科學中,二叉樹是每個結點最多有兩個子結點的有序樹。通常子結點被稱作“左孩子”和“右孩子”。二叉樹被用作二叉搜索樹和二叉堆。隨后他又和他人討論起了二叉搜索樹。
什么是二叉搜索樹呢?二叉搜索樹首先是一棵二叉樹。設key[p]表示結點p上的數值。對于其中的每個結點p,若其存在左孩子lch,則key[p]>key[lch];若其存在右孩子rch,則key[p]<key[rch];注意,本題中的二叉搜索樹應滿足對于所有結點,其左子樹中的key小于當前結點的key,其右子樹中的key大于當前結點的key。
小Y與他人討論的內容則是,現在給定一棵二叉樹,可以任意修改結點的數值。修改一個結點的數值算作一次修改,且這個結點不能再被修改。若要將其變成一棵二叉搜索樹,且任意時刻結點的數值必須是整數(可以是負整數或0),所要的最少修改次數。
相信這一定難不倒你!請幫助小Y解決這個問題吧。

Input
第一行一個正整數n表示二叉樹結點數。結點從1~n進行編號。
第二行n個正整數用空格分隔開,第i個數ai表示結點i的原始數值。
此后n - 1行每行兩個非負整數fa, ch,第i + 2行描述結點i + 1的父親編號fa,以及父子關系ch,(ch = 0 表示i + 1為左兒子,ch = 1表示i + 1為右兒子)。
結點1一定是二叉樹的根。

Output
僅一行包含一個整數,表示最少的修改次數。

Sample Input
3
2 2 2
1 0
1 1

Sample Output
2

Data Constraint
20 % :n <= 10 , ai <= 100.
40 % :n <= 100 , ai <= 200
60 % :n <= 2000 .
100 % :n <= 10 ^ 5 , ai < 2 ^ 31.

.
.
.
.
.
分析
首先求出這顆二叉樹的中序遍歷,那么問題就轉換成用最少的修改次數使這個整
數序列嚴格單調遞增

要用O(n log n)的求LIS的方法做

.
.
.
.
.
程序:

#include<iostream> #include<cstdio> #include<cstring> using namespace std;int l[100010],r[100010],a[100010],tj=0,f[100010],s[100010],n;inline int read() {int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();return s*w; }int ef(int l,int r,int x) {while (l<=r){int mid=(l+r)/2;if (f[mid]<=x) l=mid+1; else r=mid-1;}return l; }void dfs(int x) {if (x==0) return;dfs(l[x]);s[++tj]=a[x];dfs(r[x]); }int main() {n=read();for (int i=1;i<=n;i++)a[i]=read();for (int i=2;i<=n;i++){int fa,ch;fa=read();ch=read();if (ch==0) l[fa]=i; else r[fa]=i;}dfs(1);for (int i=1;i<=n;i++)s[i]-=i;int w=1;f[w]=s[1];for (int i=2;i<=n;i++){if (s[i]>=f[w]) f[++w]=s[i]; else f[ef(1,w,s[i])]=s[i];}printf("%d",n-w);return 0; }

轉載于:https://www.cnblogs.com/YYC-0304/p/10458944.html

總結

以上是生活随笔為你收集整理的改造二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。