知識點:樹的層數(shù)和高度和深度
首先要介紹樹的層數(shù):頂點的層數(shù)是從根到該頂點唯一通路的長度椰于。
樹的深度 = 層數(shù)
樹的高度 = 層數(shù) + 1
就拿這棵樹來說
10
/ \
6 14
/ / \
4 12 16
這棵樹的高度是3蚓胸,但深度是2。
頂點的高度與深度跟樹的高度與深度是不同的凿试,對于頂點的高度是從下往上計數(shù)的匹舞,可深度是從上往下計數(shù)的褐鸥,就像是一棟大樓,我們說這棟大樓的高度是從下往上看的赐稽,而對于深度叫榕,可以看做樹頂端的根頂點向下延伸的深度。這樣就容易區(qū)分高度與深度了姊舵。比如拿值為14的頂點晰绎,它的高度是2,深度是1括丁。
知識點:Python log() 函數(shù)
import math
math.log(x[, base])
x -- 數(shù)值表達式荞下。
base -- 可選,底數(shù)躏将,默認為 e
math.log(10,2) : 3.32192809489
計算出來的結果是有小數(shù)的
思路:
平衡二叉樹必定是最小高度的樹锄弱;每一次的點數(shù)符合等比數(shù)列
import math
class MinimalBST:
def buildMinimalBST(self, vals):
# write code hereclass MinimalBST:
n = len(vals)
res = math.log(n+1,2)
if res%1:
return int(res)+1
return int(res)
if __name__ == '__main__':
va = [1,2,3,4,5,6,7]
s = MinimalBST()
res = s.buildMinimalBST(va)
print(res)