2017/8/29 腾讯测试开发工程师模拟笔试题

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(node1and (node2and (node31
            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

你可能感兴趣的:(笔试和面试总结)