例如:输入深度为4,三个子节点分别为10,13,15,最小子树的根节点为12.
我们可已根据树的遍历方式推测出这是一个中序遍历值为从1到2^k-1。
我们可以用二分搜索技术来找最小子树的根节点。
//基于二分搜索
#include<algorithm>
#include<cmath>
int FindMin(int* arr,int left,int right)
{
int mid=((right-left)>>1)+left;
if(arr[0]<=mid&&arr[2]>=mid)
return mid;
else if(arr[0]>mid)
return FindMin(arr,mid+1,right);
else if(arr[2]<mid)
return FindMin(arr,left,mid-1);
}
void test2()
{
int k=0;
cin>>k;
int arr[3];
for(int i=0;i<3;++i)
{
cin>>arr[i];
}
sort(arr,arr+3);
int right=(1<<k)-1; //把1左移k位,===》2^k
int min=FindMin(arr,1,right);
cout<<min<<endl;
}
转载请注明原文地址: https://ju.6miu.com/read-7078.html