A、对于一颗满二叉排序树深度为K,节点数是2^K-1;节点值为1至2^K-1。给出K和任意三个节点的值,输出包含该三个节点的最小子树的根节点值
B、满二叉排序树的中序是一个有序的序列 即左子树都比根节点小,右子树都比根节点大 根节点为左节点与右节点值和的一半
C、样例输入:4 10 15 13
D、样例输出:12
#code=utf-8
import sys
import math
if __name__=="__main__":
myList=list(map(int,sys.stdin.readline().strip().split()))
#保存任意输入的三个节点值
node1=myList[1]
node2=myList[2]
node3=myList[3]
#根节点为左节点与右节点值和的一半
root=math.pow(2,myList[0])/2.0
leftNode=1 #初始化左节点为最小1
rightNode=math.pow(2,myList[0])-1 #初始化2^k-1节点数
for i in range(myList[0]): #遍历深度K次数
#给出的三个节点数都比根节点值小,则说明都在左子树,更新右节点数值和根节点值
if(node1<root) and (node2<root) and (node3<root):
rightNode=root-1
root=(rightNode+leftNode)/2
#给出的三个节点数都比根节点值大,则说明都在右子树,更新左节点数值和根节点值
elif(node1>root) and (node2>root) and (node3>root):
leftNode=root+1
root=(rightNode+leftNode)/2
#给出的三个节点数至少有一个比根节点值小,至少有一个比根节点大,则说明此根节点值为该三个节点的最小子树的根节点值
else:
print int(root)
break