输入一个满二叉树的深度和它的三个节点,求三个节点最小子树的,根节点

    xiaoxiao2021-03-25  124

    例如:输入深度为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

    最新回复(0)